【发布时间】:2013-10-02 15:41:00
【问题描述】:
我们有一个多线程应用程序。在当前实现中,thread1 在启动时创建,并定期(每秒左右,可配置)唤醒以检查磁盘是否有可能保存的文件。这些文件由另一个线程 thread2 保存。正在运行的 thread1 及其周期性唤醒可能会减慢应用程序的速度。
现在我们有机会使用 boost::condition 变量将 thread1 阻塞,直到 thread2 通知它。通过这样做,需要创建一个标志以避免来自 thread2 的不必要通知,并且该标志需要同步并由 thread2以高频率(几秒钟内数百次)检查>。或者 thread1 在每次写入时都会收到通知。
我的问题如下:
在 boost::condition 实现中,thread1 仍然需要频繁唤醒以检查标志,不同之处在于实现对我们隐藏,但它确实做到了。我对吗? Windows 和 Java 中的类似 API 做同样的事情?
如果一个线程不处于等待状态,但频繁多次通知会发生什么?
在我的例子中,它会通过切换到 boost::condition 实现来提高整体性能?我的意见是不。
【问题讨论】:
-
这取决于 boost::condition 是如何实现的。如果它使用系统条件变量,则线程 1 应退出调度,直到收到通知,在收到通知之前不会唤醒。
-
您提到的标志是在创建新文件时设置并在线程1完成此文件时重置?
-
是的。 thread2 设置该标志以让 thread1 知道文件已准备好。 thread1 将处理它,然后重置该标志。
标签: c++ multithreading boost boost-thread