【发布时间】:2014-01-20 01:00:01
【问题描述】:
pEnd_是一个对象成员,只能在一个线程中添加如下add(),它可能被另一个线程读取。 add() 中需要 __sync_synchronize 吗?
struct Vector {
...
void add(int v) {
*pEnd_ = v;
__sync_synchronize(); // is this needed?
++pEnd_;
}
private:
int* pBegin_;
int* pEnd_;
}
在另一个线程中迭代。
for (p = pBegin_; p != pEnd_; ++p) {
// read barrier here may be inserted
if (*p) {
....
}
}
【问题讨论】:
-
屏障是指“互斥体”吗?还是“sync_synchronize”?
-
如果多个线程同时执行
++pEnd_,就会出现竞争条件。 -
就我而言,只有一个线程可以写。
-
@ZhouHuabing 但是你需要断言在一个写入过程中没有人读取。
-
如果您编写由 writer(s) 执行的代码和 reader(s) 的代码,问题可能会更清楚。
标签: c++ multithreading memory barrier