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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

條件變量

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

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

條件變量通常搭配互斥鎖來使用,是因?yàn)闂l件的檢測(cè)是在互斥鎖的保護(hù)下進(jìn)行的,也就是說條件本身是由互斥鎖保護(hù)的,線程在改變條件狀態(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ā)送信號(hào)(signal)和等待。發(fā)送信號(hào)操作即是通知一個(gè)或多個(gè)處于等待狀態(tài)的線程,某個(gè)共享變量的狀態(tài)已經(jīng)改變,這些處于等待狀態(tài)的線程收到通知之后便會(huì)被喚醒,喚醒之后再檢查條件是否滿足。等待操作是指在收到一個(gè)通知前一直處于阻塞狀態(tài)。

函數(shù) pthread_cond_signal()和 pthread_cond_broadcast()均可向指定的條件變量發(fā)送信號(hào),通知一個(gè)或多個(gè)處于等待狀態(tài)的線程。調(diào)用 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ù)至少能喚醒一個(gè)線程,而 pthread_cond_broadcast()函數(shù)則能喚醒所有線程。

等待條件變量

#include < pthread.h >

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

    關(guān)注

    87

    文章

    11332

    瀏覽量

    210023
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28434
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    505

    瀏覽量

    19716
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux線程編程

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

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

    讀寫鎖,它把對(duì)共享資源的訪問者劃分成讀者和寫者,讀者只對(duì)共享資源進(jìn)行讀訪問,寫者則需要對(duì)共享資源進(jìn)行寫操作。件變量線程可用的一種同步機(jī)制,條件變量給多個(gè)
    的頭像 發(fā)表于 08-26 20:44 ?1529次閱讀
    <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 ?542次閱讀

    Linux線程線程間同步

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

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

    (),只有在沒有線程在該條件變量上等待的時(shí)候才能注銷這個(gè)條件變量,否則返回EBUSY。因?yàn)?b class='flag-5'>Linux
    發(fā)表于 06-03 17:13

    淺析linux下的條件變量

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

    Linux線程同步方法

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

    線程編程之Linux線程編程

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

    linux線程機(jī)制-線程同步

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

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

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

    Linux線程與同步

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

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

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

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

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

    linux內(nèi)核中percpu變量的實(shí)現(xiàn)

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

    互斥鎖及條件變量的使用

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