【问题标题】:Communication between Two threads in pthreadpthread中两个线程之间的通信
【发布时间】:2012-06-07 18:44:26
【问题描述】:

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

【问题讨论】:

    标签: c linux multithreading pthreads posix


    【解决方案1】:

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

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

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

    【讨论】:

    【解决方案2】:

    您的问题没有通用答案,这取决于您的很多用例。

    pthread 的经典方法是使用互斥条件对向读取线程发出值的修改信号。这适用于该线程大部分是空闲的并且只需要进行更改的情况。在这里,除了互斥体之外的条件变量将确保您的读取线程在他无所事事时不会吃资源。

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多