提升:如何处理时间相关的线程操作?

时间:2011-08-26 08:59:04

标签: c++ multithreading boost

例如,如果我们不依赖于时间,那么我们可以使用数组或读取器线程和一个编写器线程来解决like this via shared_mutex and shared_lock这种情况。但是如果我们想要在certan时间框架内完成所有的写入操作,并且如果没有完成,则停止等待并开始在读取器线程内做其他事情。怎么办这样的事情?如何能够从一些观察者线程到所有读者线程说 - “嘿伙计们 - 在这个时间框架中,有来自作家的任何新数据,所以继续。”

2 个答案:

答案 0 :(得分:3)

使用定时锁定。

boost::shared_mutex  m

Reader()
 shared_lock   lock(m, timeout);
 if(!lock) {
   //I don't have the lock. Don't touch the resource and do something else.
 }
 else {
   //I have the lock. Read now.
 }

Writer()
 upgrade_lock lck(m);
 upgrade_to_unique_lock uniqueLock(lck);

只需选择超时值即可。请注意,它不一定精确。

顺便说一句:如果你打算使用Boost.Threads,也许你应该read the documentation。它非常广泛。我从来没有使用过Boost.Threads,我花了几秒钟就找到了它。

答案 1 :(得分:1)

还有另一种解决问题的方法:查看Thread Pool模式。使用此模式,您可以将工作划分为可由工作线程池执行的单元。每当有事情要做时,你排队一个工作单元,池中的下一个可用线程将执行它。这可以确保线程总是忙于做某事(当有事情要做时)。

您需要了解线程安全producer-consumer queues才能实现此模式。