CRITICAL SECTION同步易出錯的地方

2021-06-19 04:11:16 字數 1972 閱讀 3562

眾所周知通過critical_section可以對多個執行緒同步,然而加鎖和解鎖的次數不匹配將導致死鎖:

[cpp]view plain

copy

class

clock  

~clock()  

void

lock()  

void

unlock()  

private

:  critical_section    m_cs;  

};  

[cpp]view plain

copy

int_tmain(

intargc, _tchar* argv)    

1、執行緒a加鎖兩次、解鎖一次,將導致執行緒b一直不能獲得鎖:

2、執行緒a加鎖一次,解鎖兩次,當執行緒a下次再試圖獲得鎖,將不能獲取的到陷入死等,也將導致死鎖,同理執行緒b。:

[cpp]view plain

copy

unsigned 

int_stdcall threadfun(

void

* argv)  

printf("thread(%d) is running\n"

, getcurrentthreadid());  

// 解鎖兩次,下次glock.lock()將陷入死等

3、解決,可以定義乙個自動獲得鎖,保證加鎖和解鎖完全匹配:

4、後記:以上是最簡單的鎖實現,加鎖和解鎖往往導致效率低下,以此改進,使用讀寫鎖、閂鎖等不同的加鎖粒度來提公升效能。

Linux中易出錯的一些命令

mkdir 新建目錄 touch 新建檔案 cd 可以回到之前的工作目錄 cd 可進入使用者的宿主目錄 代表當前目錄 代表上級目錄。netstat 顯示網路連線 路由表和網路介面資訊 netstat an ping 用於檢視網路上的主機是否在工作 ping 選項 主機名 ip ifcpnfig 檢視...

建立二叉樹 易出錯的地方

include include typedef struct node node node createnode int value void addnode node root,int value else else int main node tree root createnode value...

乙個同步控的工作記錄 隨時隨地地同步

工作原因,需要隨時隨地的收發郵件 記筆記 寫日記等。這裡記錄下我工作中使用的一些同步工具。要做到隨時隨地,同步工具需要同時支援pc和嵌入式平台。之前用的是windows mobile的手機,用著很費勁,過年換到android平台,三星的i9000。1.郵件 當然是谷歌的gmail。pc和androi...