一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

兩個線程和互斥鎖如何形成死循環(huán)?

璟琰乀 ? 來源:一口Linux ? 作者:一口Linux ? 2021-01-02 16:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

UF7nYf.png

程序流程圖

如上圖所示:

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

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

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

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

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

【注意】為了保證主線程和子線程都能夠分別獲得鎖mutex1、mutex2,各自獲得鎖后一定要先sleep 1秒鐘,否則創(chuàng)建完子線程后,主線程還有一定的時間片,主線程會申請到鎖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

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

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

qaYFb2.png

查看該進程創(chuàng)建的線程id:4204、4205。

MZJJb2.png

責任編輯:haq

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

    關注

    88

    文章

    3689

    瀏覽量

    95252
  • 線程
    +關注

    關注

    0

    文章

    508

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    移植最新版的rt-thread nano時發(fā)現(xiàn)程序只要一進去entry函數(shù)就直接跳到一死循環(huán)里,為什么?

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

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

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

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

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

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

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

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

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

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

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

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:rwlock

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

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

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

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

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

    sr存器如何確定q的值

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

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

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

    觸發(fā)器的兩個穩(wěn)定狀態(tài)分別是什么

    觸發(fā)器作為數(shù)字電路中的基本邏輯單元,具有兩個穩(wěn)定狀態(tài),這兩個狀態(tài)通常用于表示二進制數(shù)碼中的0和1。
    的頭像 發(fā)表于 08-12 11:01 ?3076次閱讀

    雙穩(wěn)態(tài)電路的兩個穩(wěn)定狀態(tài)是什么

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

    雙穩(wěn)態(tài)觸發(fā)器的兩個基本性質是什么

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

    種SR存器的約束條件

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