相关疑难解决方法(0)

C++ std :: set线程安全吗?

我有一个关于std :: set的线程安全性的问题.

据我所知,我可以遍历一个集合并添加/擦除成员,这不会使迭代器无效.

但请考虑以下情况:

  • 线程'A'遍历一组shared_ptr <Type>
  • 线程'B'偶尔会将项目添加到此集合中.

程序运行时我经历过段错误,我不确定为什么会这样.缺乏线程安全的原因是什么?

c++ stl std stdset

36
推荐指数
3
解决办法
3万
查看次数

STL队列的线程安全性

我正在使用队列来在线程之间进行通信.我有一个读者和多个编写器线程.我的问题是,每当我从队列中使用push/front/pop进行读取时,我是否需要锁定队列?我可以做以下事情:

//reader threads
getLock();
get the number of elements from the queue
releaseLock();

int i = 0;
while( i < numOfElements){
    queue.front();
    queue.pop();
    i++
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,我希望减少锁定代码的粒度,因为编写器线程只会写入队列的后面,并且只有一个读取器线程.只要我得到的元素个数,然后我能得到从队列中的元素或者我需要封闭front(),并pop()在锁呢?

c++ multithreading stl

19
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×2

stl ×2

multithreading ×1

std ×1

stdset ×1