2011-04-25 71 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可以用于这种情况。