最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux實現(xiàn)線程同步的多種方式匯總

 更新時間:2025年06月09日 11:34:03   作者:kaede  
本文詳細介紹了Linux下線程同步的多種方法,包括互斥鎖、自旋鎖、信號量以及它們的使用示例,通過這些同步機制,可以解決線程安全問題,防止資源競爭導致的錯誤,示例代碼展示了如何在多線程環(huán)境中正確地管理共享資源,確保線程安全,需要的朋友可以參考下

什么是線程同步?

想象一下超市收銀臺:如果所有顧客(線程)同時擠向同一個收銀臺(共享資源),場面會一片混亂。線程同步就是給顧客們發(fā)"排隊號碼牌",確保:

  • 有序訪問:每次只處理一個顧客
  • 協(xié)調(diào)工作:收銀員(CPU)高效服務
  • 避免沖突:防止算錯賬(數(shù)據(jù)錯誤)

Linux提供5種"排隊機制"解決多線程協(xié)作問題:

一、互斥鎖(單人洗手間規(guī)則)

#include <pthread.h>

// 創(chuàng)建鎖(相當于洗手間的"有人/無人"標識)
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

void* thread_task(void* arg) {
        // 嘗試進入(如果里面有人就排隊等待)
        pthread_mutex_lock(&lock);

        /* 臨界區(qū)開始(你的"私人時間") */
        printf("Thread %d using resource\n", *(int*)arg);
        sleep(1); // 模擬耗時操作
        /* 臨界區(qū)結(jié)束 */

        // 開門出來(讓下一位使用)
        pthread_mutex_unlock(&lock);
        return NULL;
}

適用場景:

  • 文件寫入操作
  • 銀行賬戶余額修改
  • 任何需要"獨享"資源的場景

特點:

  • 簡單易用
  • 過度使用會降低并發(fā)性能

二、條件變量(咖啡廳取餐系統(tǒng))

pthread_cond_t order_ready = PTHREAD_COND_INITIALIZER;
pthread_mutex_t counter_lock = PTHREAD_MUTEX_INITIALIZER;
int order_number = 0;

// 顧客線程(等待取餐)
void* customer(void* arg) {
        pthread_mutex_lock(&counter_lock);
        while(order_number == 0) { // 必須用while循環(huán)檢查
                pthread_cond_wait(&order_ready, &counter_lock); // 放下鎖等待通知
        }
        printf("Got order %d!\n", order_number);
        pthread_mutex_unlock(&counter_lock);
        return NULL;
}

// 廚師線程(通知取餐)
void* chef(void* arg) {
        sleep(2); // 模擬做飯時間
        pthread_mutex_lock(&counter_lock);
        order_number = 123;
        pthread_cond_signal(&order_ready); // 叫號通知顧客
        pthread_mutex_unlock(&counter_lock);
        return NULL;
}

工作流程:

  • 顧客:鎖定柜臺 → 檢查訂單 → 等待叫號
  • 廚師:完成訂單 → 鎖定柜臺 → 更新訂單 → 發(fā)送通知
  • 顧客:被喚醒 → 重新檢查 → 取餐

適用場景:

  • 生產(chǎn)者-消費者模型(如消息隊列)
  • 線程間任務協(xié)調(diào)

三、自旋鎖(搶車位)

pthread_spinlock_t parking_lock;

// 初始化鎖(停車場入口)
pthread_spin_init(&parking_lock, PTHREAD_PROCESS_PRIVATE); 

void* driver(void* arg) {
        // 開車繞圈找空位(CPU忙等待)
        pthread_spin_lock(&parking_lock);

        /* 停車成功(臨界區(qū)) */
        printf("Car %d parked\n", *(int*)arg);

        // 開走釋放車位
        pthread_spin_unlock(&parking_lock);
        return NULL;
}

適用場景:

  • 極短操作(<0.1毫秒)
  • 內(nèi)核開發(fā)
  • 實時系統(tǒng)

注意事項:

  • 會浪費CPU資源
  • 比互斥鎖響應更快

鎖類型對比表:

場景推薦鎖類型類比
短時間獨占操作自旋鎖快速便利店購物
長時間獨占操作互斥鎖餐廳包間用餐
多讀少寫讀寫鎖圖書館
線程組協(xié)調(diào)屏障旅行團集合
事件通知條件變量咖啡廳叫號系統(tǒng)

到此這篇關于Linux實現(xiàn)線程同步的五種方式的文章就介紹到這了,更多相關Linux線程同步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Linux?VIM編輯二進制文件方式

    Linux?VIM編輯二進制文件方式

    這篇文章主要介紹了Linux?VIM編輯二進制文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于windowx的Hyper-v安裝CentOS系統(tǒng)

    基于windowx的Hyper-v安裝CentOS系統(tǒng)

    這篇文章主要介紹了基于windowx的Hyper-v安裝CentOS系統(tǒng) ,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Linux中避免客戶端與服務端的端口沖突

    Linux中避免客戶端與服務端的端口沖突

    在Linux系統(tǒng)中,為了防止客戶端程序在分配TCP源端口時使用到服務器程序綁定的特定端口(例如12345),可以采用多種策略來避免端口沖突,總體而言,優(yōu)先使用sysctl設置保留端口是最簡單有效的解決方案,但也可以采用其他方法來確保端口不會發(fā)生沖突
    2024-10-10
  • linux服務器上openssl版本升級方式

    linux服務器上openssl版本升級方式

    文章詳細介紹了在Linux服務器上升級OpenSSL版本的步驟,包括查看當前版本、檢查yum源、下載源碼、編譯安裝、創(chuàng)建軟鏈、更新動態(tài)鏈接庫以及驗證版本
    2025-03-03
  • 一文詳解Linux如何查詢服務和定位可執(zhí)行文件

    一文詳解Linux如何查詢服務和定位可執(zhí)行文件

    這篇文章主要為大家詳細介紹了Linux中查詢服務和定位可執(zhí)行文件的相關命令,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-11-11
  • 利用lynis如何進行l(wèi)inux漏洞掃描詳解

    利用lynis如何進行l(wèi)inux漏洞掃描詳解

    這篇文章主要給大家介紹了關于利用lynis如何進行l(wèi)inux漏洞掃描的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • Linux掛載本地操作系統(tǒng)ISO鏡像的操作步驟

    Linux掛載本地操作系統(tǒng)ISO鏡像的操作步驟

    這篇文章主要介紹了在服務器上掛載ISO文件的兩種方法:使用loop設備和直接掛載光驅(qū)設備,選擇哪種方法取決于你手里的是ISO文件路徑還是光驅(qū)設備節(jié)點,通過簡單的判斷命令可以快速選擇合適的掛載方式,需要的朋友可以參考下
    2026-03-03
  • Linux系統(tǒng)之iostat命令的基本使用詳解

    Linux系統(tǒng)之iostat命令的基本使用詳解

    iostat命令是Linux/Unix系統(tǒng)中用于監(jiān)控磁盤I/O活動的工具,可以顯示磁盤的讀寫速率、I/O等待時間、CPU使用率等信息,通過分析這些指標,可以幫助系統(tǒng)管理員發(fā)現(xiàn)性能瓶頸,并進行優(yōu)化
    2025-12-12
  • 如何利用Gitlab-ci持續(xù)部署到遠程機器(詳細教程)

    如何利用Gitlab-ci持續(xù)部署到遠程機器(詳細教程)

    這篇文章主要介紹了如何利用Gitlab-ci持續(xù)部署到遠程機器(詳細教程),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Centos7 Mysql 5.6 多主一從 解決方案與詳細配置

    Centos7 Mysql 5.6 多主一從 解決方案與詳細配置

    這篇文章主要介紹了Centos7 Mysql 5.6 多主一從 解決方案與詳細配置,需要的朋友可以參考下
    2016-04-04

最新評論

江陵县| 沙雅县| 湘乡市| 綦江县| 广水市| 靖远县| 金湖县| 南雄市| 沁源县| 卫辉市| 新巴尔虎左旗| 桃园市| 盐源县| 台山市| 齐河县| 桂平市| 年辖:市辖区| 双鸭山市| 柘荣县| 晋城| 鄂托克前旗| 青浦区| 泸定县| 潞城市| 荔波县| 岢岚县| 临海市| 光山县| 丰县| 江永县| 美姑县| 临沧市| 湘潭县| 乡城县| 桑日县| 前郭尔| 东港市| 彰武县| 房产| 汉川市| 丰镇市|