关于一道多线程的题(Linux)

dark_fire 2017-02-25 07:06:13
ABC三个线程,共用一个缓存。C每次生产一块数据,AB每次读一块数据,三个线程读写速度不一致。
现要求,A、B在每次读数据时必须读同一块数据,并且每块数据只能被每个线程读一次。

https://www.ibm.com/search/csass/search/?q=Posix%E7%BA%BF%E7%A8%8B%E7%BC%96%E7%A8%8B%E6%8C%87%E5%8D%97&sn=dw&lang=zh&cc=CN&en=utf&hpp=20&dws=cndw&lo=zh
...全文
311 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingtianweichong 2017-03-14
  • 打赏
  • 举报
回复
[b]不考虑效率问题,简化程序设计,可以把AB读看成 一次读操作,问题就可以看成一个线程读另一个线程写(这里保证写一次读一次应该不难),然后只需要处理AB之间读同步的问题。
xiaohuh421 2017-02-28
  • 打赏
  • 举报
回复
假设有一个当前读取块索引 index A 添加一块数据后, 通知B有数据读取, B加锁当前读取索引index, 然后B再通知C在指定index读取数据. A和B之间 对数据缓冲区加锁, C不加锁. B和C之间只需处理读取取index同步, 保证每次访问相同的index即可.
Wenxy1 2017-02-26
  • 打赏
  • 举报
回复
线程间同步问题,使用信号量就行。
参考:https://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part3/index.html
yangxingmeng 2017-02-26
  • 打赏
  • 举报
回复
信号量+ 读count=2, ab线程读一次count--,然后等待读信号量发生, 当count=0,出发写信号量, c被写信号量唤醒,然后写入数据, 至count=2

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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