boost或者linux posix线程信号量死锁求释疑

waq12 2012-11-10 01:48:39
现在有两个操作,一个in,一个out,操作一块公共数据(类似数组)。
要求如果in和out同时处理相同的记录,就串行。如果处理不同的记录就需要支持并行。
我们现在的处理核心逻辑为两个死循环:
in:while(true)
lock
设置当前row_id_in
cv_in.wait(row_id_in != row_id_out) // 此处死锁
unlock

输入处理

row_id_in置in空标识
cv_out.notify
out:while(true)
lock
设置当前row_id_out
cv_out.wait(row_id_in != row_id_out) // 此处死锁
unlock

输出处理

row_id_out置out空标识
cv_in.notify

通过日志跟踪,发现如果in/out为相同的标识时,偶尔会出现notify唤醒另一线程的wait时未成功,之后马上又进入了下一次循环的wait。导致两个线程同时wait死锁
当前代码的实现用的是boost与linux下的posix线程库,都出现死锁。求教下notify如果有这样的问题,那么所有的基于信号量的生产者消费者模式都有可能存在的问题?
...全文
75 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
waq12 2012-11-10
  • 打赏
  • 举报
回复
在线求解释,顶!

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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