我正在创建两个线程 thread1 和 thread2。线程 1 正在读取模拟值,线程 2 应处理线程 1 中读取的模拟值并设置 PWM 参数。到目前为止我所做的是,在主文件(我在其中创建线程)中声明了一个全局变量(用于存储模拟值)并将指向全局变量的指针传递给两个线程。在线程1中,读取的模拟值存储在全局变量中,在线程2中读取全局变量并对其进行处理。所以,我的问题是还有其他方法可以做到这一点吗?即我们有信号量、互斥量等最适合此应用程序的?
您的问题没有通用答案,这取决于您的用例。
pthread 的经典方法是使用互斥条件对向读取线程发出值修改信号。这适用于该线程大部分处于空闲状态并且只需要进行更改的情况。在这里,除了互斥体之外的条件变量将确保您的读取线程在无事可做时不会消耗资源。
如果您的读取线程正在执行一些永久性工作并且只需要使用该值,则有不同的情况:第一个是使用互斥体保护变量,只是为了确保您读取的值不会被半途更新,并且从而始终保持一致。
更现代的方法是使用(或确保)读写操作是原子的。 C11(新的 C 标准)为此提供了接口,并且大多数编译器已经将此类操作作为扩展实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)