我有两个线程作为生产者,消费者。在生产者线程我有下面的代码:调度程序在返回之前是否可以中断线程?
{
mediaQueue->PushEvent(boost::bind(/* params are not important */));
return 0;
}
mediaQueue是一个消息队列,并在PushEvent()调用线程将被告知有要处理的作业。消费者线程只执行用绑定创建的仿函数。
对于我来说,生产者线程在消费者线程执行仿函数之前返回是非常重要的。
所以这个问题:生产者是否有可能在推动事件之后但在它返回之前被中断?
我的研究到目前为止我认为这是可能的,我应该实现锁定,但你对此有何看法?
是的 - 这是奇怪的要求。正如你所说,在消费者到达代码主体之前使用同步对象强制生产者返回,肯定会起作用,但当消费者醒来时很可能导致近乎毫无意义的上下文更改队列,然后在明确的同步等待上:(再次,最好,(唯一的)解决方案来解决不合理的请求,所以+1。 –
@MartinJames:尽管如此,没有同步的代码似乎可以正常工作,那么线程当前正在按照“正确”的顺序执行,所以同步将会很便宜,因为同步对象将在需要在另一个线程中获取之前被释放。 UB的时间变化时,对于时机变化时双重上下文切换的机会是一个很大的交易:-) –
@Steve Jessop是的,那正是我的观点。代码是这样工作的,但是我确信一旦它开始生产就会引发问题:) –