Boost:如何处理依赖于时间的线程操作

Boost: how deal time dependent thread operations?

本文关键字:时间 依赖于 线程 操作 处理 何处理 Boost      更新时间:2023-10-16

例如,有一个数组或读线程和一个写线程,我们可以像这样通过shared_mutex和shared_lock来连接它们,如果我们不依赖于时间,这是有效的。但是如果我们想在一定的时间范围内完成所有的写操作,如果它们没有完成,停止等待,开始在读线程内做其他事情。怎么做呢?如何能够从某个观察者线程对所有的读者线程说——"嘿,伙计们——在这个时间框架内会有任何来自作者的新数据,所以继续吧。"

使用定时锁

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。线程,也许你应该阅读文档。这是相当广泛的。我从来没用过Boost。线程,我花了几秒钟找到这个

还有另一种解决问题的方法:查看线程池模式。使用此模式,您将工作划分为可由工作线程池执行的单元。只要有事情要做,就将一个工作单元排队,池中下一个可用的线程将执行它。这保证了线程总是在忙着做一些事情(当有事情要做的时候)。

你需要学习线程安全的生产者-消费者队列来实现这个模式。