0

我正在构建一个多生产者单消费者机制。我想做这样的事情,假设我可以访问一个可用于两个线程的 boost lockfree 队列实例和一个同步条件变量:

线程 1(生产者):

Object * myObj = new Object();
lockfree_queue.push(myObj);
condition_variable.notify();

线程 2(消费者):

condition_variable.wait();
Object * myObj = lockfree_queue.pop();
...
delete myObj;

在多核系统上,线程 2 是否有可能将 myObj 视为指向未初始化的内存或部分初始化的对象(假设它有一些成员变量)?

4

1 回答 1

0

一旦new返回并给你一个指针,对象就完全构造好了。

如果对象中有未初始化的成员,那么是构造函数没有初始化它们的错。

即使队列包含对象实例而不是指针也应该不是问题,因为push调用将在您通知条件变量之前完全完成,因此在推送对象之前其他线程甚至不会弹出队列。

于 2015-09-01T09:10:08.270 回答