【发布时间】:2011-10-05 04:08:50
【问题描述】:
我有一个(软)实时系统,它查询一些传感器数据,进行一些处理,然后等待下一组传感器数据。传感器数据在接收线程中读取并放入队列中,因此主线程“休眠”(通过互斥体)直到新数据到达。
还有其他任务,例如日志记录或后台的一些长期计算。这些被实现为在其他线程中运行。
但是,重要的是,当主线程处理传感器数据时,它应该具有最高优先级,这意味着其他线程应该尽可能不消耗任何 CPU 资源(目前后台线程导致主线程变慢以不可接受的方式下降。)
根据Setting thread priority in Linux with Boost 的说法,设置线程优先级是否可以完成这项工作是值得怀疑的。我想知道如何衡量设置线程优先级的真正效果? (平台:Angstrom Linux、ARM PC)
有没有办法完全“暂停”和“继续”线程?
C++ 中是否有一种模式可以让我自己实现暂停/继续? (我也许可以将后台工作分成小块,如果允许我继续,我可以在每块工作之后检查,但问题是这些块应该有多大等等。)
感谢您的意见!
【问题讨论】:
-
为什么不直接创建具有很高优先级的接收线程和主线程呢?当驱动程序设置传感器线程就绪时,它将使用所有 CPU 运行,当它设置互斥锁时,主线程将使用所有 CPU 运行,(一旦传感器线程返回等待其驱动程序) .如果做不到这一点,您能否将部分/全部传感器数据处理移至传感器驱动程序?
标签: c++ multithreading design-patterns