提升线程:带有条件变量的互斥锁,主线程挂起

时间:2014-03-14 09:53:56

标签: linux c++11 boost-thread

我正在尝试将状态机实现为名为"的类的一部分。来源交易"。 Evey-time我在主线程中收到一个请求,它生成这个类的一个实例,状态机开始执行,直到它到达一个状态,它必须等待#34; event_handler&#中主线程的响应34 ;.为了解决这个问题,我正在使用boost库实现一个条件变量,如下所示:

来源交易类

boost::mutex mut;
boost::condition_variable cond;

wait_ho_complete_indication_state:
{
    mState = SRC_WAIT_HO_COMPLETE_INDICATION;

    boost::unique_lock<boost::mutex> lock(mut);
    while (!response_received)
    {
        cond.wait(lock);
    }

    response_received = false;
    goto success_state;
}

在主文件中,我有以下内容:

主要类

Event_Handler function:
        // Find the source transaction which corresponds to this Indication
        src_transaction_ptr t;
        tpool->find(msg.source(), mobile_id.to_string(), t);
        {
            boost::lock_guard<boost::mutex> lock(t->mut);
            t->response_received = true;
        }
        t->cond.notify_one();
        // Dome some stuff

我的问题是,每次执行代码时,状态机都会被困在&#34; wait_ho_complete_indication_state&#34;并且它不会离开该状态,而且event_handler没有报告它已收到任何事件。就像主要被绞死一样。

所以我的问题是条件变量的实现有什么问题吗?

非常感谢。

0 个答案:

没有答案