C(linux平台)中基于事件的通信的最佳机制

时间:2014-12-07 13:15:48

标签: linux multithreading events communication

我想在两个线程之间进行通信。只有一个事件触发其他线程。

我的条件是基于事件的沟通应该是有效的。 我尝试使用消息队列,但通常mq_send需要时间。

1 个答案:

答案 0 :(得分:1)

我认为你最好的方法是使用Pthread_mutex和pthread_cond

您应该等待以下事件:

    pthread_mutex_t lock;
    pthread_cond_t cond;



    pthread_mutex_lock(&>lock);
    /* releasing the mutex and block untill a cond get a signal*/
    pthread_cond_wait(&cond, &lock);
    /* execute your code */

    your_condtion = 0;

    /* signaling the producer that we "consumed" the data */
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&lock);

你发送事件如下:

    /* checking if consumer already used our data */
    pthread_mutex_lock(&lock);
    while(your_condition != 0)
        pthread_cond_wait(&cond, &lock);
    /* execute your code */
            your_condition = 1;
    /* sending event */
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&lock);

您可以使用my producer consumer example作为参考