当前位置: 代码迷 >> 多核软件开发 >> boost中线程同步的有关问题
  详细解决方案

boost中线程同步的有关问题

热度:9184   发布时间:2013-02-26 00:00:00.0
boost中线程同步的问题 - C/C++ / C++ 语言
我有两个线程A,B。A往队列q里写数据,B读完后pop出队列头。
使用的是boost::mutex::scoped_lock,但是这样做发现了一个问题。由于A写数据的速度很快,而B读完再处理的速度比较慢,这样队列就会越来越长。
我的想法是,A去竞争mutex不可用的时候,不是被阻塞,而是做些其他的事(比如压缩数据),这样就可以缓解速度不统一的问题。
但是如何让A在等待mutex的时候干别的事呢?

------解决方案--------------------------------------------------------
如果只有A、B两个线程操作这个队列,并且队列是FIFO或环形,则无需用mutex,只需预留足够大的缓冲区即可
------解决方案--------------------------------------------------------
boost::mutex::scoped_lock只是对boost::mutex的一个包装,使得在定义变量时lock,退出程序块时候unlock,你的情况应该自己控制boost::mutex的lock和unlock
------解决方案--------------------------------------------------------
看看Boost.Thread原作者写的一片文章吧:
Boost.Threads库

------解决方案--------------------------------------------------------
1,你这种case完全无需加锁
2,或者你开两个线程完成B的工作