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)