我在 C++ 中使用 tbb 编程。我不应该使用消息队列、FIFO、PIPES 等,因为它是特定于平台的。我应该使用 tbb 特定的 API。
Thread1: // Pseuodo code exits as below
// I will take mutex
m_bIsNewSubsArrived = true;
StartSubscriptionTimer();
m_bIsFristSubsArrived = true;
// Spawn a thread here.
if(m_tbbTimerThread == NULL)
{
m_bIsTimerMutexTaken = true;
m_timerMutex.lock();
m_tbbTimerThread = new tbb::tbb_thread(&WaitForTimerMutex, this);
if (m_tbbTimerThread->native_handle() == 0)
{
// report error and return.
return;
}
}
// Thread 1 exited.
In another thead I am releasing mutex which is taken above.
Thread 2.
m_timerMutex.unlock();
m_bIsTimerMutexTaken = false;
Thread 3:
// I am waiting for mutex
m_timerMutex.lock();
在上面的代码问题中,我认为线程 1 锁定的 m_timerMutex 没有被释放,所以我认为线程 2 无法解锁。线程 3 被永远阻塞。
我想我可以使用信号量,但是 TBB 中用于信号量的 API 是什么。
我可以在不睡觉和使用 tbb 特定 API 的情况下做到这一点的最佳技术是什么。
感谢您的时间和帮助。