原 聊一聊程式死鎖的問題

2022-05-28 23:12:18 字數 1771 閱讀 6368

今天在專案的過程中,程式執行一段時間,http服務就沒辦法響應了。通過日誌排查,發現最後是因為在http響應的程式中,程式一直卡死再lock這個地方。通過半天思考自己的**,貌似一直沒想通自己這個地方為什麼會死鎖,貌似我程式沒有出現啊?我都是在同乙個物件同乙個函式加鎖和解鎖成對出現的啊?不可能出現這個函式沒解鎖又上鎖的問題啊?

1

bool workqueue::do_add_work(workbase*work)210

11while (m_queue_size >=max_work_number)

1617

m_work_queue.push_back(work);

18 m_queue_size++;

19// //這裡需要排重,防止重複

20 // //遍歷

21 // bool find=false;

22 // list::iterator iter=m_work_queue.begin();

23 // for(;iter!=m_work_queue.end();)

28 // else

31 // }

32 // if(!find)

36//

dlogprint("add broadcast or signal worker cond");

37/*

wake up a worker thread

*/38 pthread_cond_signal(&m_worker_cond);

39//

pthread_cond_broadcast(&m_worker_cond);

4041 pthread_mutex_unlock(&m_queue_lock);

42//

dlogprint("add unlock");

43return

true

; 44}

4546 workbase*workqueue::get_work()

4753

54while (m_queue_size == 0)59

60//

work = m_work_queue.front();

61//

m_work_queue.pop();

62//

取第乙個元素

63 work =m_work_queue.front();

64m_work_queue.pop_front();

65 m_queue_size--;

6667

//dlogprint("get broadcast or signal producer cond");

68/*

wake up a sleeping producer, maybe there is one

*/69 pthread_cond_signal(&m_producer_cond);

70//

pthread_cond_broadcast(&m_producer_cond);

7172 pthread_mutex_unlock(&m_queue_lock);

73//

dlogprint("get unlock");

74return

work;

75 }

之前都不會出現死鎖的情況?無法現在是加了紅色的那段**啊,為什麼就這麼容易出現死鎖呢?

原文出處:

聊一聊 Flask 的 jsonify

首先我們來看一段 python from flask import flask,jsonify tasks api v1.0 tasks methods get defget tasks return jsonify if name main true 在這段 裡面,我們看到了今天的主角jsonif...

聊一聊我的二 二

我是乙個二 二一年六月畢業的學軟體技術的大專生 也就是明年畢業 對於任何人來說,這一年裡是充滿挑戰的。可能乙個小小的想法,就會決定未來的走向。二 二 是對於所有人都是複雜的一年,特別是對於我.二 二 一年裡充滿了對於我是充滿悲傷的,疫情爆發,長輩離世,面臨就業問題等等,各種我不敢面對的事情。都出現在...

聊一聊PHP的global

眾所周知,在php的函式中,如果想使用全域性變數,一種是使用超全域性變數 globals,另一種是在函式中使用global關鍵字宣告,使用超全域性變數 globals的方式大家都知道了,今天來好好聊一聊使用global方式來宣告變數。我們來看如下例子 a 1 b 2 function test te...