pthread中两个线程之间的通信

时间:2012-06-03 07:41:20

标签: c linux multithreading pthreads posix

我正在创建两个线程thread1和thread2。 Thread1正在读取模拟值,thread2将处理在thread1中读取的模拟值并设置PWM参数。到目前为止我所做的是,在主文件中(我在创建线程的地方)我已经声明了一个全局变量(用于存储模拟值)并将指针传递给全局变量两个线程。在thread1中,存储在全局变量和thread2中的读取模拟值读取全局变量并对其进行处理。所以,我的问题是有没有其他方法可以做到这一点?即我们有信号量,互斥量等最适合这种应用?

2 个答案:

答案 0 :(得分:4)

您的问题没有一般性答案,这取决于您的大量用例。

pthreads的经典方法是使用互斥条件对来表示对读取线程的值的修改。这适用于该线程大部分处于空闲状态且只能进行更改的情况。在这里,除了互斥锁之外的条件变量将确保你的阅读线程在他无事可做时不会吃掉资源。

如果您的阅读线程正在进行一些永久性工作并且只是使用该值,则存在不同的场景:第一种是使用互斥锁来保护变量,只是为了确保您读取的值不是 - 方式更新,并始终保持一致。

更现代的方法是使用(或确保)您的读写操作是原子的。新的C标准C11为此提供了接口,大多数编译器已经将这些操作实现为扩展。

答案 1 :(得分:1)

我认为这需要一个非常基本的互斥锁。请参阅下面的伪代码:

Thread1() {
    Mutex_lock();
    Process global variable;
    Unlock_mutex();
}

类似的线程2 ..  如果您提供当前的代码,我可以提供更具体的答案。