c++多线程对同一数据结构进行操作是否需要加锁的问题

2017-08-28 14:17:21 +08:00
 tengtengking

两个线程同时操作 queue 是否需要加锁,例如 1.两个线程同时进队需要加锁吗?

2.两个线程同时出队需要加锁吗?

3.两个线程同时访问队列,一个出队、一个进队,需要加锁吗?

把 queue 换成 set 上述三个问题又如何回答呢?

望大神指教!!谢谢

3754 次点击
所在节点    程序员
5 条回复
gnaggnoyil
2017-08-28 14:58:24 +08:00
你说的 queue 和 set 指的是啥?如果是 std::deque 和 std::set/std:unordered_set 的话三种操作全部需要加锁,否则 data race
tengtengking
2017-08-28 16:06:33 +08:00
@gnaggnoyil 只要是多线程操作容器都需要加锁吗?,有没有不需要加锁的情况?多谢
araraloren
2017-08-28 16:52:26 +08:00
@tengtengking 正常情况下 stl 里面都需要,自己可以利用 CAS 实现一些无锁数据结构。。
sryanyuan
2017-08-28 17:27:50 +08:00
全部需要加锁
没有写 多线程读可以不加锁
tengtengking
2017-08-28 19:14:32 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/386350

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX