2010-09-09 58 views
2

为什么需要一个互斥对象,其中Acquire和Release方法只返回0?为什么需要一个空互斥量?

我学习的ACE框架,它有一个Null_Mutex类,我想知道它是如何来使用。

class Null_Mutex 
{ 
public: 
Null_Mutex (void) {} 
˜Null_Mutex (void) {} 
int remove (void) { return 0; } 
int acquire (void) const { return 0; } 
int try_acquire (void) const { return 0; } 
int release (void) const { return 0; } 
}; 
+2

请加入更多内容。 – leppie 2010-09-09 07:39:02

回答

4

它是空对象模式:你可以通过它的代码需要互斥时,你并不需要实际的互斥逻辑。

+0

你能举一个例子吗? – 2010-09-09 07:53:34

+2

+1。 @Tony:例如,你可能只想在一个线程上运行你的代码,然后使用真正的互斥锁就不需要了,但是会带来很大的开销。使用空互斥量你不需要重写所有的代码 - 你只需要传递一个空的互斥量,代码很乐意“使用”它,而且你没有开销。 – sharptooth 2010-09-09 09:56:23

+0

除了一个事实,即提取出你的互斥这样的,并呼吁通过间接调用(函数指针)的所有方法花费很多不是直接调用更多的互斥锁和解锁功能... – 2012-02-01 02:29:22