Boost logo

Boost Users :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-03-21 09:23:02


Ben Hutchings wrote:

> > after which thread B will pick up the lock and write the data and
>> resets the boolean flag. After releasing the lock, threads A will
>> immediately try to re-acquire the lock.
> <snip>
>
> You might find that this works on your development machine, but it will
> likely fail elsewhere. There is no guarantee that releasing a mutex
> that's blocking another thread is will wake that other thread.

This is an interesting question. The situation is that thread B waits on a
mutex and thread A first released mutex and then locks it again. POSIX says
that:

  If there are threads blocked on the mutex object referenced by mutex when
  pthread_mutex_unlock() is called, resulting in the mutex becoming
  available, the scheduling policy is used to determine which thread shall
  acquire the mutex.

Which I interpret as saying that if B waits on the lock when A releases it,
B will acquire the lock, as it's the only thread waiting on the lock. Am I
wrong?

OTOH hand, I don't understand why flag is needed. Obviously, there are some
performance concerns which are not made clear in the original post.

- Volodya


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net