2011-04-25 70 views
2

想象一下,你有雙重鎖:二進制信號VS互斥

Ex: 

mutex.lock(); 
mutex.lock(); 

Ex: 

binarysemaphore.wait(); 
binarysemaphore.wait(); 

請問這兩種行爲有什麼不同?或者他們會是一樣的。

+3

我不熟悉術語「雙鎖」。你的意思是「遞歸互斥」嗎? – 2011-04-25 21:29:15

回答

4

我假定你的意思遞歸鎖(不是雙鎖)

操作是否會有所不同完全取決於平臺和執行。

我認爲在Windows中,默認值是Mutexes是遞歸的(所以可重入鎖定工作),信號量不是。

但是,在pthreads(POSIX)上,您可以根據自己的喜好進行配置。

+0

+1指出了對平臺的依賴。如果我沒有記錯,Posix確實支持一種遞歸互斥鎖,但它不可移植。 – 2011-04-26 04:15:08

+0

@Als:根據我的手冊頁(和[其他來源](http://cursuri.cs.pub.ro/~apc/2003/resources/pthreads/uguide/users-gu.htm)),'pthread_mutexattr_gettype( PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_NORMAL)'應該可用;只是'PTHREAD_MUTEX_DEFAULT'行爲是未定義的(即依賴於平臺)。這可能是因爲我沒有意識到pthreads支持受損的平臺 – sehe 2011-04-26 06:28:13

0

在研究中,我們被告知Semaphoremax count = 1等於Mutex

這並不完全正確。

  1. Mutex不能被任何其他線程釋放。
  2. Semaphore可以用於這種情況。