Kol*_*nya 4 c++ flags multithreading synchronization segmentation-fault
在我的程序中,我运行了一些线程.每个线程都获得一个指向某个对象的指针(在我的程序中 - 向量).每个线程都会修改矢量.
有时我的程序会因为segm-fault而失败.我以为它发生了,因为线程A开始用向量做某事而线程B还没有用它完成操作?它真的可以吗?
我该怎么办呢?线程同步?或者也可以制作一个标志,VectorIsInUse并在使用它时将此标志设置为true?
vector和所有STL容器一样,它不是线程安全的.您必须自己明确管理同步.一个std::mutex或boost::mutex可能用于同步访问vector.
不要使用标志,因为这不是线程安全的:
isInUse标志的值,它是falseisInUse标志的值,它是falseisInUse为trueisInUse是false并设置它truevector请注意,每个线程都必须在vector需要使用它的整个时间内锁定它.这包括修改vector和使用vector迭代器,因为如果迭代器引用的元素是erase()或者vector经历了内部重新分配,它就会失效.例如,不要:
mtx.lock();
std::vector<std::string>::iterator i = the_vector.begin();
mtx.unlock();
// 'i' can become invalid if the `vector` is modified.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13259 次 |
| 最近记录: |