Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多线程无锁应用程序中的一个向量和多个迭代器 我在C++应用程序中有以下功能: 有一个固定长度的预先分配的std::vector 第一个线程通过向量进行查找(只是查找元素,匹配一些模式) 第二个线程有时会更新向量的元素(只是更新,它不会删除元素) 第三个线程也会更新向量元素(条件,当它与第二个线程重叠时,绝对排除)_C++_Multithreading_Vector_Stl_Lock Free - Fatal编程技术网

多线程无锁应用程序中的一个向量和多个迭代器 我在C++应用程序中有以下功能: 有一个固定长度的预先分配的std::vector 第一个线程通过向量进行查找(只是查找元素,匹配一些模式) 第二个线程有时会更新向量的元素(只是更新,它不会删除元素) 第三个线程也会更新向量元素(条件,当它与第二个线程重叠时,绝对排除)

多线程无锁应用程序中的一个向量和多个迭代器 我在C++应用程序中有以下功能: 有一个固定长度的预先分配的std::vector 第一个线程通过向量进行查找(只是查找元素,匹配一些模式) 第二个线程有时会更新向量的元素(只是更新,它不会删除元素) 第三个线程也会更新向量元素(条件,当它与第二个线程重叠时,绝对排除),c++,multithreading,vector,stl,lock-free,C++,Multithreading,Vector,Stl,Lock Free,每个线程都使用自己的迭代器来迭代向量元素。这意味着,一个迭代器只能由一个线程移动 问题是:这个线程安全吗?使用多个线程同时迭代std::vector,然后通过专用的迭代器(每个线程都使用自己的迭代器来实现这个目的) 我担心的是,在STL的深处,它可能会导致一些故障(也许我是偏执狂)。我测试了这种方法,它看起来很有效,但是我想从专家那里得到一些反馈。STL不是MT安全的。请看一看-特别是“多线程问题”一章。在您的例子中,线程2和线程3可以竞争相同的向量元素,因此您需要在每个元素中使用互斥 除了读取

每个线程都使用自己的迭代器来迭代向量元素。这意味着,一个迭代器只能由一个线程移动

问题是:这个线程安全吗?使用多个线程同时迭代std::vector,然后通过专用的迭代器(每个线程都使用自己的迭代器来实现这个目的)


我担心的是,在STL的深处,它可能会导致一些故障(也许我是偏执狂)。我测试了这种方法,它看起来很有效,但是我想从专家那里得到一些反馈。

STL不是MT安全的。请看一看-特别是“多线程问题”一章。在您的例子中,线程2和线程3可以竞争相同的向量元素,因此您需要在每个元素中使用互斥

除了读取/写入竞争条件外,您是安全的。一些STL实现(特别是在调试版本中)会进行检查,以确保正确使用迭代器(例如,未使用无效迭代器)。很容易想象这样的情况:这些类型的检查不会是线程安全的。但这一切似乎都没有意义,因为在读线程扫描元素时,写入线程“更新”元素之间存在竞争条件。