美文网首页
POSIX Conditions

POSIX Conditions

作者: 张霸天 | 来源:发表于2016-12-26 21:50 被阅读0次

    ****POSIX**** 条件锁需要互斥锁和条件两项来实现,虽然看起来没什么关系,但在运行时中,互斥锁将会与条件结合起来。线程将被一个互斥和条件结合的信号来唤醒。

    首先初始化条件和互斥锁,当 ****ready_to_go**** 为 ****flase**** 的时候,进入循环,然后线程将会被挂起,直到另一个线程将 ****ready_to_go**** 设置为 ****true**** 的时候,并且发送信号的时候,该线程会才被唤醒。

    pthread_mutex_t mutex;
    pthread_cond_t condition;
    Boolean     ready_to_go = true;
    
    void MyCondInitFunction()
    {
        pthread_mutex_init(&mutex);
        pthread_cond_init(&condition, NULL);
    }
    
    void MyWaitOnConditionFunction()
    {
        // Lock the mutex.
        pthread_mutex_lock(&mutex);
    
        // If the predicate is already set, then the while loop is bypassed;
        // otherwise, the thread sleeps until the predicate is set.
        while(ready_to_go == false)
        {
            pthread_cond_wait(&condition, &mutex);
        }
    
        // Do work. (The mutex should stay locked.)
    
        // Reset the predicate and release the mutex.
        ready_to_go = false;
        pthread_mutex_unlock(&mutex);
    }
    
    void SignalThreadUsingCondition()
    {
        // At this point, there should be work for the other thread to do.
        pthread_mutex_lock(&mutex);
        ready_to_go = true;
    
        // Signal the other thread to begin work.
        pthread_cond_signal(&condition);
    
        pthread_mutex_unlock(&mutex);
    }
    
    

    相关文章

      网友评论

          本文标题:POSIX Conditions

          本文链接:https://www.haomeiwen.com/subject/zihsvttx.html