ACE_Mutex ::获取问题

时间:2010-01-01 08:35:52

标签: c++

我的课程中有一个互斥量,其定义如下:

ACE_Mutex m_specsMutex;

当我使用不带参数的acquire()方法时,一切正常。但是当我使用时间值(如下)时,它会立即返回-1值。我确信这个互斥锁在其他任何地方都没有获得,所以它不应该返回-1。

m_specsMutex.acquire(ACE_OS::gettimeofday() + ACE_Time_Value(30))

我做错了吗?

2 个答案:

答案 0 :(得分:1)

浏览ACE_Mutex的doxygen文档,我不明白你的代码是如何编译的。超时值(tv)通过引用或指针传递,以便acquire()可以更新获取互斥锁的绝对时间。你不能传递表达式。试试这样:

ACE_Time_Value time = ACE_OS::gettimeofday() + ACE_Time_Value(30);
m_specsMutex.acquire(&time);

答案 1 :(得分:0)

我在win32上遇到了同样的问题。我需要很多时间来寻找解决方案,并希望与您分享。

ACE_Mutex(= ACE_Thread_Mutex)是使用CRITICAL_SECTION为win32环境实现的。这非常快,但无法等待超时。

最后我使用了ACE_Process_Mutex而不是ACE_Mutex。这是针对win32环境使用基于HANDLE的互斥锁实现的,可以在超时时使用。

可在此处找到更多信息:http://flylib.com/books/en/3.19.1.83/1/#_/term_