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