99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

一口Linux
認證:優質創作者
所在專題目錄 查看專題
Linux中常見同步和互斥機制設計原理
Linux信號量(1)-SYSTEM V
Linux信號量(2)-POSIX 信號量
Linux信號量(3)-內核信號量
兩個線程,兩個互斥鎖,怎么形成一個死循環?
Linux庫概念,動態庫和靜態庫的制作,如何移植第三方庫
作者動態 更多
某通信公司筆試題,你會做幾道?
3天前
10種初學者最常見的c語言段錯誤實例及原因分析
05-30 12:13
linux系統監控工具小神器:btop
05-17 17:37
有沒有權貴開后門讓子女做軟件開發人員?
05-10 23:36
一文包你學會網絡數據抓包
03-15 09:26

兩個線程,兩個互斥鎖,怎么形成一個死循環?

粉絲的提問,必須安排。

兩個線程,兩個互斥鎖如何形成死鎖?

程序流程圖如下:

程序流程圖

如上圖所示:

  1. t0時刻,主線程創建子線程,并初始化互斥鎖mutex1、mutex2;
  2. t1時刻,主線程申請到了mutex1、子線程申請到了mutex2;
  3. t2時刻,主線程和子線程都sleep 1秒鐘,防止優先獲得時間片的線程直接申請到了另外1個互斥鎖,導致程序直接退出;
  4. t3時刻,主線程和子線程都想獲得對方手里的互斥鎖,但是對方都來不及釋放自己手里的鎖;
  5. 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\n"); 
 sleep(1);
 pthread_mutex_lock(&mutex1); 
 printf("new thread get mutex1\n"); 
 
 
 pthread_mutex_unlock(&mutex1);
 printf("new thread release mutex1\n");
 pthread_mutex_unlock(&mutex2); 
 printf("new thread release mutex2\n");
    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\n");
  sleep(1);
        pthread_mutex_lock(&mutex2);  
  printf("main thread get mutex2\n");
        pthread_mutex_unlock(&mutex2);
  printf("main thread release mutex2\n");
        pthread_mutex_unlock(&mutex1);
  printf("main thread release mutex1\n");
    }
    return 0;
 } 

編譯運行

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

查看下該進程的線程

查看進程ID,為4204

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

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 1
關注 181
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 久草不卡视频 | 国产经典视频一区 | 午夜视频福利在线 | 国产a一级毛片爽爽影院 | 好男人社区神马影视www | 无码免费一区二区三区免费播放 | 无码熟妇人妻AV在线影片 | 激情国产AV做激情国产爱 | 35岁少妇被23岁小伙征服 | 任你操av | 2022国产在线 | 男男GAY亚洲帅哥在线 | 91尤物国产福利在线观看 | 亚洲第一香蕉视频 | 色窝窝色蝌蚪在线视频 | 波多老师无码av中字专区 | aⅴ日本亚洲欧洲免费天堂 2019中文字幕久久 | 欧美XXXXX高潮喷水麻豆 | 成人免费在线视频播放 | 欧美亚洲系列 | 老司机免费在线视频 | 日本欧美一区二区三区高清 | 可以免费看的av毛片 | 久久精品人妻无码专区 | 狠狠色丁香婷婷综合久久来来去 | 99在线在线视频免费视频观看 | 中文字幕乱码亚洲无线码 | 精品无码一区二区三区在线 | 日韩视频在线观看不卡 | 青草青青在线视频 | 无码专区天天躁天天躁在线 | 色综合久久精品 | 免费久久久久 | 日本片成人在线观看 | 国产一区久久 | 精品乱码一区二区三四区 | 欧美一区二区三区在线看 | 国产视频精品自拍 | 亚洲国产精品一区二区尤物区 | 一性一交一伦一色一情人 | 国产精品色区 |