【发布时间】:2012-04-18 13:02:22
【问题描述】:
我有两个线程 A,B 定期更新两个全局传感器读取变量,它们执行相同的例程。第三个线程 C 将在这些值更新后立即对它们进行一些计算。我设置了一些条件变量,当 A 和 B 都更新全局变量时,C 将立即读取。我担心线程 C 错过了一些传感器读数,因为它使用 while 循环的轮询安排在新的 A、B 更新之后。我不确定我的担心是否必要,因为我是 pthread 的新手。 我的开发环境是嵌入式linux板,目前正在学习pthread。 有没有比为每个全局变量设置两个条件变量更好的方法。
【问题讨论】:
-
以什么方式更好?条件变量有什么问题?你有代码复杂性的问题吗?表现?正确性的保证?有实际的争执吗?或者这种访问只是偶尔的,所以重要的是正确性? (如果是这样,为什么不直接使用互斥锁?)
-
C 不能错过更新重要吗?例如,传感器 A 的读数在 C 开始使用它之前更新两次是否可以(因此 C 只关心最近的读数)还是不可接受?如果是后者,那么可能需要一个可以容纳多个读取的队列,或者您可能需要阻塞生产者线程(A 或 B),直到 C 开始使用更新。
标签: linux multithreading thread-safety pthreads posix