2011-08-28 77 views
3

從主線程鎖定互斥並從另一個線程釋放是否是一種很好的做法?哪裏解鎖pthread中的互斥?

或者我應該確保一個線程能夠將它全部整合在一起?即:鎖定和解鎖

+1

這個問題不是很好,但它爲什麼值得-1? +1來補償.. –

回答

3

互斥體只能由鎖定它的同一個線程解鎖。違反此規則的程序有未定義行爲並且不便攜或不穩定;它有時可能會工作,並在其他時間出現可怕的失敗,在稍微不同的系統上編譯,在月球的不同階段或升級後。

如果您確實需要這種行爲(鎖定一個線程並通過另一個線程解鎖),信號量可能會滿足您的需求。信號量沒有所有者,任何線程可能幾乎在任何時候都會調用sem_postsem_wait

0

鎖定一個線程並在另一個線程中解鎖是一種不好的做法,因爲這需要兩個線程彼此通信。一個線程應該執行自己的鎖定和解鎖。

0

從一個線程鎖定並從另一個線程解鎖永遠不是好習慣。這個名字說明了這一切 - 相互排斥。需要它的線程持有它直到完成。

8

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()調用線程 不保留將導致未定義的行爲。

+1

+1的正確答案,但我建議引用[POSIX規範](http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html)而不是「manpagez.com」 。 (規範是規範的。) – Nemo