91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

    文章

    3689

    瀏覽量

    95271
  • 線程
    +關注

    關注

    0

    文章

    508

    瀏覽量

    20226
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    移植最新版的rt-thread nano時發現程序只要一進去entry函數就直接跳到一死循環里,為什么?

    我在移植最新版的rt-thread nano時發現程序只要一進去entry函數就直接跳到一死循環里,我使用的編譯器是armgcc10.2版本。然而我移植舊版的rt-thread nano就可以正常使用。
    發表于 04-01 07:04

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    sr存器如何確定q的值

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

    功放機AB兩個聲道輸出怎么接

    功放機AB兩個聲道輸出的接線方式,主要取決于您想要實現的音頻效果以及音箱的配置。以下將詳細介紹幾種常見的接線方式,以及它們各自的特點和適用場景。 一、基礎接線方式 在大多數情況下,功放機的AB兩個
    的頭像 發表于 08-23 10:40 ?9381次閱讀

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

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

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

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

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

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

    種SR存器的約束條件

    基本約束條件: SR存器是一種基本的數字邏輯電路,用于存儲一位二進制信息。它有兩個輸入端:S(Set)和R(Reset),以及兩個輸出端:Q和Q'(Q的反相)。以下是SR存器的基本
    的頭像 發表于 07-23 11:34 ?1816次閱讀
    主站蜘蛛池模板: 九九精品国产 | 永久手机看片福利盒子 | 色五五月五月开 | 一区二区三区在线免费 | 欧美一区二区三区四区视频 | 高清一级毛片一本到免费观看 | 成人毛片一区二区三区 | 欧美两性网| 午夜影视体验区 | 久久成人国产精品免费 | 国产日本三级 | 亚洲电影一区二区三区 | 又大又粗进出白浆直流动态图 | 亚洲日本在线观看 | 亚洲最大成人网色 | 七月婷婷精品视频在线观看 | 亚洲一区免费 | 欧美日剧在线免费 | 日本a级特黄三级三级三级 日本边添边爱边摸边做边爱 | 色多多入口 | 亚洲一二三区视频 | 五月激情综合丁香色婷婷 | 天天天综合网 | 亚洲性久久久影院 | 免费看黄色网 | h免费在线观看 | 亚洲欧美一区二区三区图片 | 日本动漫在线看 | 国产视频福利 | 一区一精品 | 狠狠干狠狠干 | 久久久久99精品成人片三人毛片 | 日本大片免a费观看在线 | 色综合天天| 天天噜天天干 | 人人精品久久 | 久久精品男人影院 | 婷婷午夜| 综合爱爱 | 欧美一级片观看 | 色婷婷狠狠久久综合五月 |