有没有办法到QUEUE线程?

时间:2011-07-20 17:21:22

标签: c++ c linux multithreading programming-languages

我正在尝试进行缓冲区完全模拟。当我的缓冲区变满时,我需要将其复制以进行进一步处理,复制是互斥操作,但进一步处理不是。 我的动作流程是这样的,每当我要写一些东西时,如果条件为真我检查缓冲区满状态我复制当前缓冲区&处理它&然后写下新消息。

我有多个写作线程&消息应该只按顺序写入。 我的功能简述如下

bwrite(data)
{
  lock(m1);
  //invoke copy thread
  lock(m1);
  // Do write message
}

copy(data)
{
 //copy the data
 unlock(m1);
 //Do further processing
}

问题在于,一旦复制完成,消息就会以任何顺序写入,例如thread01,& thread02有&如果thread01复制第一个,我无法控制thread02thread01写完最后一条消息之前可能开始复制的事实,因此可能会丢失一条消息。

这是一个很长的问题,基本上我需要一种方法将传入的线程放入队列中,以便我可以保证下一个执行序列。

3 个答案:

答案 0 :(得分:2)

为什么不让线程写入共享队列?然后你可以让另一个线程一次一个地从队列中取出元素并写入它们 - 这可以保证它们按照排队的顺序写入。现在您只需要同步对队列的访问以使其成为线程安全的。

答案 1 :(得分:0)

答案 2 :(得分:0)

实际上我认为最好的解决方案是使用BlockingQueue。我敢肯定,如果你谷歌它你可以发现有人发布了样本c ++代码,但这里有一个它在java http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html

中的用法示例