1. 程式人生 > >Linux 執行緒同步---條件變數

Linux 執行緒同步---條件變數

  1.         pthread_cond_signal 使在條件變數上等待的執行緒中的一個執行緒重新開始。如果沒有等待的執行緒,則什麼也不做。如果有多個執行緒在等待該條件,只有一個能重啟動,但不能指定哪一個。
  2.     pthread_cond_broadcast 重啟動等待該條件變數的所有執行緒。如果沒有等待的執行緒,則什麼也不做。
  3.     pthread_cond_wait 自動解鎖互斥量(如同執行了 pthread_unlock_mutex),並等待條件變數觸發。這時執行緒掛起,不佔用 CPU 時間,直到條件變數被觸發。在呼叫 pthread_cond_wait 之前,應用程式必須加鎖互斥量。pthread_cond_wait 函式返回前,自動重新對互斥量加鎖(如同執行了 pthread_lock_mutex)。
    互斥量的解鎖和在條件變數上掛起都是自動進行的。因此,在條件變數被觸發前,如果所有的執行緒都要對互斥量加鎖,這種機制可保證線上程加鎖互斥量和進入等待條件變數期間,條件變數不被觸發。
  4.     pthread_cond_timedwait 和 pthread_cond_wait 一樣,自動解鎖互斥量及等待條件變數,但它還限定了等待時間。如果在 abstime 指定的時間內 cond 未觸發,互斥量 mutex 被重新加鎖,且 pthread_cond_timedwait 返回錯誤 ETIMEDOUT。abstime 引數指定一個絕對時間,時間原點與 time 和 gettimeofday 相同:abstime = 0 表示 1970 年 1 月 1 日 00:00:00 GMT。
  5.     pthread_cond_destroy 銷燬一個條件變數,釋放它擁有的資源。進入 pthread_cond_destroy 之前,必須沒有在該條件變數上等待的執行緒。在 LinuxThreads 的實現中,條件變數不聯結資源,除檢查有沒有等待的執行緒外,pthread_cond_destroy 實際上什麼也不做。