0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux線程條件變量是什么意思

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-21 11:18 ? 次閱讀

條件變量

條件變量用于自動阻塞線程,直到某個特定事件發(fā)生或某個條件滿足為止,通常情況下,條件變量是和互斥鎖一起搭配使用的。使用條件變量主要包括兩個動作:

  1. 一個線程等待某個條件滿足而被阻塞;
  2. 另一個線程中,條件滿足時發(fā)出“信號”。

條件變量通常搭配互斥鎖來使用,是因為條件的檢測是在互斥鎖的保護下進行的,也就是說條件本身是由互斥鎖保護的,線程在改變條件狀態(tài)之前必須首先鎖住互斥鎖,不然就可能引發(fā)線程不安全的問題。

初始化和銷毀條件變量

#include < pthread.h >

int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
int pthread_cond_destroy(pthread_cond_t *cond);

條件變量的主要操作是發(fā)送信號(signal)和等待。發(fā)送信號操作即是通知一個或多個處于等待狀態(tài)的線程,某個共享變量的狀態(tài)已經改變,這些處于等待狀態(tài)的線程收到通知之后便會被喚醒,喚醒之后再檢查條件是否滿足。等待操作是指在收到一個通知前一直處于阻塞狀態(tài)。

函數(shù) pthread_cond_signal()和 pthread_cond_broadcast()均可向指定的條件變量發(fā)送信號,通知一個或多個處于等待狀態(tài)的線程。調用 pthread_cond_wait()函數(shù)是線程阻塞,直到收到條件變量的通知。

通知條件變量

#include < pthread.h >

int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);

pthread_cond_signal()函數(shù)至少能喚醒一個線程,而 pthread_cond_broadcast()函數(shù)則能喚醒所有線程。

等待條件變量

#include < pthread.h >

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207914
  • 變量
    +關注

    關注

    0

    文章

    607

    瀏覽量

    28257
  • 線程
    +關注

    關注

    0

    文章

    501

    瀏覽量

    19580
收藏 人收藏

    評論

    相關推薦

    Linux線程編程

    Linux線程編程
    的頭像 發(fā)表于 08-24 15:42 ?1815次閱讀

    Linux線程間通訊---讀寫鎖和條件變量

    讀寫鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。件變量線程可用的一種同步機制,條件變量給多個
    的頭像 發(fā)表于 08-26 20:44 ?1352次閱讀
    <b class='flag-5'>Linux</b>下<b class='flag-5'>線程</b>間通訊---讀寫鎖和<b class='flag-5'>條件</b><b class='flag-5'>變量</b>

    Linux系統(tǒng)中線程同步方式中的條件變量方法

    今天主要和大家聊一聊,如何使用Linux線程同步方式中的條件變量。
    發(fā)表于 11-08 09:16 ?484次閱讀

    Linux線程線程間同步

    pthread_mutex_lock先加鎖,操作完之后pthread_mutex_unlock再解鎖。5、線程間同步條件變量:使用條件變量
    發(fā)表于 12-08 14:14

    Linux C 多線程編程之互斥鎖與條件變量實例詳解

    (),只有在沒有線程在該條件變量上等待的時候才能注銷這個條件變量,否則返回EBUSY。因為Linux
    發(fā)表于 06-03 17:13

    淺析linux下的條件變量

    ? 一.條件變量 ? ? 條件變量是用來等待線程而不是上鎖的,條件
    發(fā)表于 07-12 08:10

    Linux線程同步方法

    Linux下提供了多種方式來處理線程同步,最常用的是互斥鎖、條件變量和信號量。
    發(fā)表于 07-19 07:24

    線程編程之Linux線程編程

    9.2 Linux線程編程 9.2.1 線程基本編程 這里要講的線程相關操作都是用戶空間中的線程的操作。在
    發(fā)表于 10-18 15:55 ?3次下載

    linux線程機制-線程同步

    線程間的同步  同步就是線程等待某一個事件的發(fā)生,當?shù)却氖录l(fā)生時,被等待的線程和事件一起繼續(xù)執(zhí)行。如果等待的事件未到達則掛起。在linux操作系統(tǒng)中是通過
    發(fā)表于 04-02 14:42 ?401次閱讀

    Linux線程編程的高效開發(fā)

    ,就是可以讓 Windows 和 Linux 下讓鎖的表現(xiàn)統(tǒng)一。?條件變量的置位和復位有兩種常用模型:第一種模型是當條件變量置位(signa
    發(fā)表于 04-02 14:45 ?306次閱讀

    Linux線程與同步

    典型的UNIX系統(tǒng)都支持一個進程創(chuàng)建多個線程(thread)。在Linux進程基礎中提到,Linux以進程為單位組織操作,Linux中的
    發(fā)表于 04-02 14:47 ?383次閱讀

    三種Linux中的常用多線程同步方式淺析

    嵌入式linux中文站給大家介紹三種Linux中的常用多線程同步方式:互斥量,條件變量,信號量。
    發(fā)表于 05-02 14:49 ?2980次閱讀
    三種<b class='flag-5'>Linux</b>中的常用多<b class='flag-5'>線程</b>同步方式淺析

    詳談Linux操作系統(tǒng)編程的條件變量

    條件變量是用來等待線程而不是上鎖的,條件變量通常和互斥鎖一起使用。條件
    的頭像 發(fā)表于 09-27 15:23 ?1918次閱讀
    詳談<b class='flag-5'>Linux</b>操作系統(tǒng)編程的<b class='flag-5'>條件</b><b class='flag-5'>變量</b>

    linux內核中percpu變量的實現(xiàn)

    不會相互影響,所以也就不會有各種多線程問題。 正確的使用thread local變量,能極大的簡化多線程開發(fā)。所以不管是c/c++/rust,還是java/c#等,都內置了對thread local
    的頭像 發(fā)表于 01-04 13:39 ?1857次閱讀

    互斥鎖及條件變量的使用

    本文主要分為三個部分: 第一部分簡要介紹線程的概念及其使用 第二部分主要介紹互斥鎖及條件變量的使用(重點探討pthread_cond_wait) 第三部分參考運行IBM的多線程工作代碼
    的頭像 發(fā)表于 11-10 14:51 ?449次閱讀
    互斥鎖及<b class='flag-5'>條件</b><b class='flag-5'>變量</b>的使用