我有两个线程 A、B 定期更新两个全局传感器读取变量,它们执行相同的例程。第三个线程 C 将在更新后立即对这些值进行一些计算。我设置了一些条件变量,当 A 和 B 都更新了全局变量时,C 将立即读取。我担心线程 C 错过了一些传感器读数,因为它使用 while 循环的轮询是在新的 A、B 更新之后安排的。我不确定我的担心是否必要,因为我是 pthread 的新手。 我的开发环境是嵌入式linux板,目前正在学习pthread。 有没有比为每个全局变量设置两个条件变量更好的方法。
最佳答案
我会使用一个互斥量、一个条件变量和一个谓词整数生成计数器(只是一个初始化为零的常规整数)。逻辑是这样的:
要更新值:锁定互斥量。更新值。增加谓词整数。广播条件变量。释放互斥体。
读取当前值:锁定互斥量。复制谓词整数生成计数器的值。读取值。释放互斥体。
检查新值:锁定互斥量。根据您上次读取值时复制的值检查谓词整数。如果不同,则有一个新值。释放互斥体。
等待新值:锁定互斥量。当您上次读取值时谓词整数仍然保留它所持有的值,阻止条件变量释放互斥量。为您的下一次等待复制新的谓词整数。请注意新值。释放互斥体。
关于linux - 多个线程定期更新全局变量,而第三个线程等待读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209937/