我有两个线程作为生产者,消费者。在生产者线程中,我得到了以下代码:
{
mediaQueue->PushEvent( boost::bind(/* params are not important */) );
return 0;
}
mediaQueue是一个消息队列,在PushEvent()调用中,通知线程有一个要处理的作业。消费者线程只执行使用bind创建的仿函数。
对我而言,生产者线程在消费者线程执行仿函数之前返回是非常重要的。
所以问题:生成器是否可能在推送事件之后但在它返回之前被中断?
到目前为止,我的研究让我认为可以实现锁定,但您对此有何看法?
答案 0 :(得分:3)
调度程序可以随时中断您的线程。它(不一定)知道或关心你的线程在时间到了时做了什么。如果存在可能的竞争条件,是的,您必须花费时间和精力来实现正确的锁定。
在你的情况下,这很容易。只需等待从PushEvent
函数返回后在被调用函数中设置的对象。
答案 1 :(得分:1)
是的,这是可能的。可以随时对线程进行计划。
听起来有些不对劲,如果在执行语句return 0;
时这很重要。它真的是 return 必须在仿函数之前执行,还是生产者线程做的其他事情?