单线程会导致死锁吗?
生活随笔
收集整理的這篇文章主要介紹了
单线程会导致死锁吗?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我之前在我們的項目里面解決了一個死鎖的問題,然后我跟一個我的朋友聊了下,他讓我深入研究下這個問題。大家也可以考慮想我的這個問題。
首先我們再看看什么是死鎖?
什么是死鎖
用個通俗的例子講一講死鎖
死鎖從文字理論上說明的是兩個線程,可以認為是兩個人A和B,A在等待B完成某件事情,B又在等待A完成某件事情。
那如果在代碼中,單線程的某個函數,有沒有可能導致死鎖呢?
我們看下面的代碼
#include<pthread.h> #include<string.h> #include<errno.h> #include<stdio.h> #include<unistd.h> pthread_mutex_t?mutex;int?main() {pthread_mutex_init(&mutex,NULL);printf("mutex init\n");pthread_mutex_lock(&mutex);printf("mutex lock#1\n");pthread_mutex_lock(&mutex);printf("mutex lock#2\n");pthread_mutex_unlock(&mutex);pthread_mutex_unlock(&mutex);pthread_mutex_destroy(&mutex);return?0; }你看這樣的代碼會不會導致死鎖呢?
線程在上鎖后,又馬上繼續嘗試上鎖,這樣的情況會不會存在?
類似這樣的代碼
在上鎖后,然后下面會因為某種判斷后退出,下一次進來后,又會進行上鎖,這樣的死鎖是因為代碼邏輯不正確導致的,也是很多新手常犯的問題。
如果是兩個線程死鎖的情況呢?
上面的代碼比較典型了
線程1拿到1號鎖后,開始等待2號鎖,線程2拿到2號鎖后,就開始等待一號鎖。他們屬于互相等待的情況。
代碼輸出
最后,線程出現死鎖不會正常情況不會導致crash,除非代碼上因為加鎖存在的一些空指針。
所以單線程也是有可能導致死鎖的。
總結
以上是生活随笔為你收集整理的单线程会导致死锁吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GJB 5000A与GJB 5000B区
- 下一篇: C语言题目地图上有m个城市,序号依次为1