两个线程使用queue队列必须要加锁吗?

zmok8866 2016-05-26 06:01:30
一个线程是生产者,一个线程是消费者,只有这两个队列。
也就是一个线程存入数据,一个线程读取并删除数据。
队列都是先进先出的,如果不加锁,似乎也可以顺利存取。

问:在这种只有两个线程的情况下,也必须给queue加锁吗?
...全文
5220 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Robin.zhanG 2019-08-26
  • 打赏
  • 举报
回复
无锁环形队列,了解一下
chain78 2019-02-18
  • 打赏
  • 举报
回复
引用 6 楼 赵4老师 的回复:
必须要加
一个线程读取,一个线程写入,也要加锁吗?
qq_43579080 2019-02-08
  • 打赏
  • 举报
回复 1
当一端写入时,如果此时数据没写完整,你读取的话会造成读取的数据是不完整的
registercsdn 2018-11-22
  • 打赏
  • 举报
回复
引用 7 楼 lm_whales 的回复:
问题出在队列可能为空


你好, @lm_whales,

你在这里提高空队列,
假如我在读之前加一条
if(!queue.empty()){
pop and read();
}

是不是就可以了,不需要加锁了,也能实现多线程,一个读,一个写?
lm_whales 2016-05-29
  • 打赏
  • 举报
回复
队列读取,数据量没有多大吧 数据小的话,直接读出来就是了 数据大的话,队列里面存储指针就可以了
lm_whales 2016-05-29
  • 打赏
  • 举报
回复
问题出在队列可能为空
赵4老师 2016-05-27
  • 打赏
  • 举报
回复
必须要加
ztenv 版主 2016-05-27
  • 打赏
  • 举报
回复
加锁吧,简单,虽然损失了一些效率。
paschen 版主 2016-05-27
  • 打赏
  • 举报
回复
肯定要加锁, 这和顺序存取没关系
dustpg 2016-05-26
  • 打赏
  • 举报
回复
没事就是运气好,出事就是运气差。两端同时写必须加锁,不加锁 = 作死。 一读一写的话不怕读取错误数据可以不加
zmok8866 2016-05-26
  • 打赏
  • 举报
回复
引用 1 楼 dustpg 的回复:
两个独立的队列何来“临界区”?
不好意思,写错了。是两个线程共用一个队列,一个线程负责存入数据,另一个线程取出和删除数据
dustpg 2016-05-26
  • 打赏
  • 举报
回复
两个独立的队列何来“临界区”?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧