我有一个从 main 创建的生产者和消费者线程。除了 cout 语句外,它们的性能都很好

class myclass{
int x;
// stuff
}

void foo1(myclass* ob){
setX(ob->x);
// stuff
}

void foo2(myclass* ob){

cout << ob->x << endl; // ONLY THIS DOESN'T EXECUTE

ob->getX();
// stuff
}

int main(){
myclass* ob = new myclass();
boost::thread producer_thread(boost::bind(foo1, ob));
boost::thread consumer_thread(boost::bind(foo2, ob));
// stuff

producer_thread.join();
consumer_thread.join();

}

一切正常(包括显示 x 的 showX,除了 cout。有什么问题?

最佳答案

您的线程正在共享该对象,但实际上并未对其进行任何锁定。在消费者开始访问对象之前,生产者没有退出。
在 boost::thread consumer_thread(boost::bind(foo2, ob)) 之前使用 producer_thread.join() 应该可以解决这个问题,这不是最好的解决方法。使用互斥锁将是理想的。

关于c++ - 多线程线程切换问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19106595/

10-11 22:57