Re: Порядок захвата mutex'ов.
- From
- Valentin Nechayev ()
- To
- Lev Walkin ()
- Date
- 2003-05-29T17:34:06Z
- Area
- RU.UNIX.PROG
From: Valentin Nechayev <netch@segfault.kiev.ua>
>>> Lev Walkin wrote:
>> volatile int signalled = 0;
>>
>> thread1()
>> {
>> ...
>>
>> mutex_lock(mtx)
>> while (!signalled)
>> cond_wait(cond, mtx);
>> mutex_unlock(mtx);
>>
>> ...
>> }
>>
>> thread2()
>> {
>> ...
>>
>> mutex_lock(mtx); | mutex_lock(mtx);
>> signalled = 1; | signalled = 1;
>> cond_broadcast(cond); |
>> mutex_unlock(mtx); | mutex_unlock(mtx)
>> | cond_broadcast(cond);
>>
>> ...
>> }
>>
>> и для thread2() фиолетово где cond_broadcast(), внутри блока lock-unlock
>> или нет...
LW> А вот интересно, как thread 2 произведет сигнализирование путем вызова
LW> cond_broadcast(), когда он не может сделать mutex_lock(mtx), потому что
LW> thread 1 сам себе висит на while(), захватив mtx?
Вы о чём? В cond_wait() мьютекс освобождается.
-netch-
--- ifmail v.2.15dev5
* Origin: Dark side of coredump (2:5020/400)