public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: Use semaphore for producer/consumer case...
@ 2001-03-23 18:34 Manfred Spraul
  2001-03-26 14:54 ` Stelian Pop
  0 siblings, 1 reply; 7+ messages in thread
From: Manfred Spraul @ 2001-03-23 18:34 UTC (permalink / raw)
  To: stelian.pop; +Cc: linux-kernel

>      consumer()

>             /* Let's wait for 10 items */
>             atomic_set(&sem->count, -10);

That doesn't work, at least the i386 semaphore implementation doesn't
support semaphore counts < 0.

--
    Manfred


^ permalink raw reply	[flat|nested] 7+ messages in thread
* Use semaphore for producer/consumer case...
@ 2001-03-23 12:07 Stelian Pop
  2001-03-23 23:52 ` Nigel Gamble
  0 siblings, 1 reply; 7+ messages in thread
From: Stelian Pop @ 2001-03-23 12:07 UTC (permalink / raw)
  To: linux-kernel

Hi, 

I want to use a semaphore for the classic producer/consumer case
(put the consumer to wait until X items are produced, where X != 1).

If X is 1, the semaphore is a simple MUTEX, ok.

But if the consumer wants to wait for several items, it doesn't
seem to work (or something is bad in my code).

What is wrong in the following ?

	DECLARE_MUTEX(sem);

	producer() {
		/* One item produced */
		up(&sem);
	}
	
	consumer() {
		/* Let's wait for 10 items */
		atomic_set(&sem->count, -10);
	
		/* This starts the producers, they will call producer()
		   some time in the future */
		start_producers();
	
		/* Wait for completion */
		down(&sem);
	}

I can get around this by using a mutex and a separate atomic_t 
'count' variable, but it's more a workaround that a solution...

Thanks,

Stelian.
-- 
Stelian Pop <stelian.pop@fr.alcove.com>
|------------- Ingénieur Informatique Libre --------------|
| Alcôve - http://www.alcove.com - Tel: +33 1 49 22 68 00 |
|----------- Alcôve, l'informatique est libre ------------|

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2001-03-27  7:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-03-23 18:34 Use semaphore for producer/consumer case Manfred Spraul
2001-03-26 14:54 ` Stelian Pop
2001-03-26 17:12   ` Manfred Spraul
2001-03-27  7:57     ` Stelian Pop
  -- strict thread matches above, loose matches on Subject: below --
2001-03-23 12:07 Stelian Pop
2001-03-23 23:52 ` Nigel Gamble
2001-03-26 14:52   ` Stelian Pop

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox