1. 程式人生 > 其它 >【多執行緒】C++ 互斥鎖(mutex)的簡單原理分析

【多執行緒】C++ 互斥鎖(mutex)的簡單原理分析

多執行緒是多工處理的一種特殊形式,多工處理允許讓電腦同時執行兩個或兩個以上的程式。一般情況下,分為兩種型別的多工處理:基於程序和基於執行緒

  1)基於程序的多工處理是程式的併發執行。

  2)基於執行緒的多工處理是同一程式的片段的併發執行。

多執行緒程式包含可以同時執行的兩個或多個部分。這樣的程式中的每個部分稱為一個執行緒,每個執行緒定義了一個單獨的執行路徑。在多工作業系統中,同時執行的多個任務可能都需要使用同一種資源。比如說,同一個檔案,可能一個執行緒會對其進行寫操作,而另一個執行緒需要對這個檔案進行讀操作,可想而知,如果寫執行緒還沒有寫結束,而此時讀執行緒開始了,或者讀執行緒還沒有讀結束而寫執行緒開始了,那麼最終的結果顯然會是混亂的。為了保護共享資源,線上程裡也有這麼一把鎖——互斥鎖(mutex),互斥鎖是一種簡單的加鎖的方法來控制對共享資源的訪問,互斥鎖只有兩種狀態,即上鎖( lock )和解鎖( unlock )。

一、建立執行緒

在Windows下用C++建立執行緒需要匯入windows.h標頭檔案,同時呼叫CreateThread()函式。如下:

#include <windows.h>
HANDLE thread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);

引數說明:

  1)In_opt:LPSECURITY_ATTRIBUTES lpThreadAttributes, {安全設定}

  2)In SIZE_T:dwStackSize, {堆疊大小}

  3)In LPTHREAD_START_ROUTINE:lpStartAddress, {入口函式}

  4)In_opt __drv_aliasesMem LPVOID:lpParameter, {函式引數}

  5)In DWORD:dwCreationFlags, {啟動選項}

  6)Out_opt LPDWORD:lpThreadId {輸出執行緒id}

返回值:執行緒控制代碼,"控制代碼" 類似指標,但通過指標可讀寫物件,通過控制代碼只是使用物件;有控制代碼的物件一般都是系統級別的物件(或叫核心物件)。

二、建立互斥量

本文來自部落格園,作者:Jcpeng_std,轉載請註明原文連結:https://www.cnblogs.com/JCpeng/p/15008496.html