【发布时间】:2011-08-28 13:17:37
【问题描述】:
从主线程锁定互斥体并从另一个线程释放是一种好习惯吗?
或者我应该确保一个线程可以一次性完成所有操作?即:锁定和解锁
【问题讨论】:
-
这个问题无论如何都不是很好,但为什么它应该得到-1? +1 补偿..
从主线程锁定互斥体并从另一个线程释放是一种好习惯吗?
或者我应该确保一个线程可以一次性完成所有操作?即:锁定和解锁
【问题讨论】:
http://www.manpagez.com/man/3/pthread_mutex_unlock/
(也来自 POSIX 规范网站:http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html)
如果当前线程持有互斥锁,那么 pthread_mutex_unlock() 函数解锁互斥锁。
使用调用线程的互斥体调用 pthread_mutex_unlock() 不成立将导致未定义的行为。
【讨论】:
互斥锁只能由锁定它的同一线程解锁。违反此规则的程序具有未定义的行为并且不可移植或稳定;当在稍微不同的系统上编译时、在不同的月相期间或在升级之后,它有时似乎可以工作,而在其他时候却严重失败。
如果您确实需要这种行为(由一个线程锁定并由另一个线程解锁),信号量可能会满足您的需求。信号量没有所有者,基本上任何时候任何线程都可以调用sem_post或sem_wait。
【讨论】:
锁定一个线程并在另一个线程中解锁是不好的做法,因为这需要两个线程相互通信。线程应该执行自己的锁定和解锁。
【讨论】:
从一个线程锁定并从另一个线程解锁从来都不是好习惯。这个名字说明了一切——互斥。一个线程会一直持有它直到完成。
【讨论】: