女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

兩個線程和互斥鎖如何形成死循環?

璟琰乀 ? 來源:一口Linux ? 作者:一口Linux ? 2021-01-02 16:47 ? 次閱讀

兩個線程,兩個互斥鎖如何形成死鎖?程序流程圖如下:

UF7nYf.png

程序流程圖

如上圖所示:

t0時刻,主線程創建子線程,并初始化互斥鎖mutex1、mutex2;

t1時刻,主線程申請到了mutex1、子線程申請到了mutex2;

t2時刻,主線程和子線程都sleep 1秒鐘,防止優先獲得時間片的線程直接申請到了另外1個互斥鎖,導致程序直接退出;

t3時刻,主線程和子線程都想獲得對方手里的互斥鎖,但是對方都來不及釋放自己手里的鎖;

t4時刻,主線程和子線雙雙進入休眠。

【注意】為了保證主線程和子線程都能夠分別獲得鎖mutex1、mutex2,各自獲得鎖后一定要先sleep 1秒鐘,否則創建完子線程后,主線程還有一定的時間片,主線程會申請到鎖mutex2,無法形成死鎖。

死鎖

源碼如下#include 《stdio.h》#include 《stdlib.h》#include 《string.h》#include 《pthread.h》 unsigned int value1, value2, count;pthread_mutex_t mutex1,mutex2;void *function(void *arg);void *function(void *arg){ pthread_mutex_lock(&mutex2); printf(“new thread get mutex2 ”); sleep(1); pthread_mutex_lock(&mutex1); printf(“new thread get mutex1 ”); pthread_mutex_unlock(&mutex1); printf(“new thread release mutex1 ”); pthread_mutex_unlock(&mutex2); printf(“new thread release mutex2 ”); return NULL; } int main(int argc, char *argv[]){ pthread_t a_thread; if (pthread_mutex_init(&mutex1, NULL) 《 0) { perror(“fail to mutex_init”); exit(-1); } if (pthread_mutex_init(&mutex2, NULL) 《 0) { perror(“fail to mutex_init”); exit(-1); } if (pthread_create(&a_thread, NULL, function, NULL) 《 0) { perror(“fail to pthread_create”); exit(-1); } while ( 1 ) { pthread_mutex_lock(&mutex1); printf(“main thread get mutex1 ”); sleep(1); pthread_mutex_lock(&mutex2); printf(“main thread get mutex2 ”); pthread_mutex_unlock(&mutex2); printf(“main thread release mutex2 ”); pthread_mutex_unlock(&mutex1); printf(“main thread release mutex1 ”); } return 0; }

編譯運行

Q7reqy.png

從執行結果可以判斷,主線程和子線程分別獲得了互斥鎖mutex1、mutex2,sleep 1秒后,他們都想再分別申請mutex2、mutex1,而雙方都不想釋放自己手中的鎖,鎖已形成了死鎖,程序就一直處于休眠狀態。

查看下該進程的線程查看進程ID,為4204

qaYFb2.png

查看該進程創建的線程id:4204、4205。

MZJJb2.png

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3679

    瀏覽量

    94859
  • 線程
    +關注

    關注

    0

    文章

    507

    瀏覽量

    20070
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    stm32f103定時器2配置中斷,程序一直死循環,無法進入中斷,怎么解決?

    目前定時器2配置中斷,程序一直死循環,無法進入中斷,有無大佬請教或者看一下參考歷程
    發表于 03-12 08:18

    從時域和頻域兩個角度對信號進行分析

    一般來說,我們會從時域和頻域兩個角度,分別對信號進行分析。 時域 時域是真實世界存在的域,按時間順序呈現。例如,在某個時鐘信號的時域圖中,可以觀察到兩個重要的參數,波形的周期和上升沿: 時鐘周期即
    的頭像 發表于 11-19 10:18 ?2908次閱讀
    從時域和頻域<b class='flag-5'>兩個</b>角度對信號進行分析

    兩個循環里后臺讀取串口信息了,和前面板有一按鈕 怎么去控制另外的同一動作呢

    我在兩個循環里 讀取串口信息了, 怎么去控制另外的同一動作呢 大佬們,這個可以實現嗎,。目前搞到了是串口接收循環里,收到字符串,就比較長度,符合就觸發來另外
    發表于 10-19 09:25

    單相電機兩個繞組都在定子上嗎

    單相電機的兩個繞組,即起動線圈(或稱為輔助繞組、副繞組)和運行線圈(或稱為主繞組),都位于定子上 。這兩個繞組在電機中起著關鍵作用,共同協作以產生旋轉磁場,從而使電機能夠運轉。 單相電機通常由一
    的頭像 發表于 09-03 15:10 ?1860次閱讀

    ad如何設置兩個元器件的距離

    在Altium Designer(簡稱AD)中設置兩個元器件之間的距離,主要是通過設置元器件間的安全間距(Clearance)規則來實現的。這個規則定義了元器件之間、元器件與走線之間以及其他設計元素
    的頭像 發表于 09-02 15:31 ?1.5w次閱讀

    基于OpenHarmony標準系統的C++公共基礎類庫案例:rwlock

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的讀寫:rwlock。本案例主要完成如下工作:創建3線程,每個讀線程循環
    的頭像 發表于 08-30 12:42 ?601次閱讀
    基于OpenHarmony標準系統的C++公共基礎類庫案例:rwlock

    簡述基本與非門sr存器的結構及工作原理

    。以下是對其基本結構及工作原理的簡述: 一、結構 基本與非門SR存器主要由兩個與非門組成,這兩個與非門的輸出分別連接到對方的輸入端,形成交叉反饋的結構。具體來說,
    的頭像 發表于 08-28 11:01 ?3764次閱讀

    sr存器特性表q為什么有兩個

    SR存器特性表中Q之所以有兩個值,是因為這些值分別代表了存器在不同輸入條件下的狀態。具體來說,Q的兩個值分別對應了存器的“當前狀態”(
    的頭像 發表于 08-28 09:28 ?1323次閱讀

    sr存器如何確定q的值

    開關(通常是由邏輯門電路構成)組成,可以將輸入信號存為輸出信號。其基本結構通常包括兩個或非門(NOR gate)或與非門(NAND gate)交叉連接而成,形成兩個相互依賴的存儲單元
    的頭像 發表于 08-28 09:23 ?1098次閱讀

    觸發器的兩個穩定狀態分別是什么

    觸發器作為數字電路中的基本邏輯單元,具有兩個穩定狀態,這兩個狀態通常用于表示二進制數碼中的0和1。
    的頭像 發表于 08-12 11:01 ?2633次閱讀

    雙穩態電路的兩個穩定狀態是什么

    雙穩態電路是一種具有兩個穩定狀態的電子電路,廣泛應用于數字電路、通信系統、存儲器等領域。 雙穩態電路的基本概念 雙穩態電路是一種具有兩個穩定狀態的電路,即在沒有外部輸入信號的情況下,電路可以保持在
    的頭像 發表于 08-11 15:00 ?2397次閱讀

    雙穩態觸發器的兩個基本性質是什么

    雙穩態觸發器(Bistable Trigger)是一種具有兩個穩定狀態的邏輯電路,廣泛應用于數字電路設計中。它具有兩個基本性質:記憶性和切換性。 一、雙穩態觸發器的基本概念 1.1 雙穩態觸發器
    的頭像 發表于 08-11 10:08 ?1198次閱讀

    種SR存器的約束條件

    基本約束條件: SR存器是一種基本的數字邏輯電路,用于存儲一位二進制信息。它有兩個輸入端:S(Set)和R(Reset),以及兩個輸出端:Q和Q'(Q的反相)。以下是SR存器的基本
    的頭像 發表于 07-23 11:34 ?1550次閱讀

    互斥和自旋的實現原理

    互斥和自旋是操作系統中常用的同步機制,用于控制對共享資源的訪問,以避免多個線程或進程同時訪問同一資源,從而引發數據不一致或競爭條件等問題。 互斥
    的頭像 發表于 07-10 10:07 ?928次閱讀

    自旋互斥的使用場景是什么

    自旋互斥種常見的同步機制,它們在多線程編程中被廣泛使用。在本文中,我們將介紹自旋
    的頭像 發表于 07-10 10:05 ?1386次閱讀