C C 多執行緒程式設計之六 pthread互斥量

2021-08-21 19:36:57 字數 4130 閱讀 4199

多執行緒程式設計之執行緒同步互斥量

pthreadposix threads的簡稱,是posix執行緒標準

pthread執行緒同步多個執行緒協調地,有序地同步使用共享資源c/c++多執行緒程式設計之五】pthread執行緒深入理解中講述到,多執行緒共享程序資源,乙個執行緒訪問共享資源需要一段完整地時間才能完成其讀寫操作,如果在這段時間內被其他執行緒打斷,就會產生各種不可預知的錯誤。協調執行緒按一定的規則,不受打擾地訪問共享資源,保證正確性,這便是執行緒同步的出發點。

互斥量,是最簡單的執行緒同步機制,也是最常用的同步策略。

1.互斥量mutex):

互斥量是一種執行緒同步物件,「互斥」的含義是同一時刻只能有乙個執行緒獲得互斥量。乙個互斥量對應乙個共享資源,互斥量狀態:1.解鎖狀態意味著共享資源可用,2.加鎖狀態意味著共享資源不可用

乙個執行緒需要使用共享資源時,使用thread_mutex_lock申請:1.當互斥量為解鎖狀態,則占用互斥量,並給互斥量加鎖,占用資源(互相量為加鎖狀態,其他執行緒不能使用互斥量並等待互斥量變為解鎖狀態),2.如果互斥量為加鎖狀態,則執行緒等待,直到互斥量為解鎖狀態(其他執行緒使用完共享資源後會解鎖互斥量,釋放資源)。

2.互斥量基本函式

#include

初始化互斥量:

intpthread_mutex_init(pthread_mutex *mutex,

const pthread_mutexattr_t* mutexattr);

該函式第乙個引數為乙個互斥量指標,第二個引數為互斥量屬性指標(一般設為null)。該函式將按照互斥量屬性對互斥量進行初始化。

互斥量加鎖:

intpthread_mutex_lock(pthread_mutex *mutex);

該函式申請乙個互斥量並對其進行加鎖,使該互斥量對其他執行緒不可用,讓其他申請互斥量的執行緒等待。

互斥量解鎖:

intpthread_mutex_unlock(pthread_mutex *mutex);

該函式對互斥量進行解鎖操作,使該互斥量對其他執行緒可以。

銷毀互斥量:

int pthread_mutex_destroy(pthread_mutex *mutex);

該函式銷毀乙個不再需要的互斥量,釋放系統資源。

3.牛刀小試

#include "pthread.h"

#include "sched.h"

#include "semaphore.h"

#include "stdio.h"

#include "windows.h"

#pragma comment(lib, "pthreadvc2.lib")     //必須加上這句

pthread_t t1;           //pthread_t變數t1,用於獲取執行緒1的id

pthread_t t2;           //pthread_t變數t2,用於獲取執行緒2的id

char share[10];         //共享資源區

pthread_mutex_t work_mutex;                    //宣告互斥量work_mutex

void* my_thread_1(void* args)

p++;

*p='\0';

printf("1 share is : %s\n",share);

pthread_mutex_unlock(&work_mutex);   //解鎖

sleep(100);            //啟用互斥量時也去除注釋,為程序排程提供時間

}return null;

}void* my_thread_2(void* args)

p++;

*p='\0';

printf("2 share is : %s\n",share);

pthread_mutex_unlock(&work_mutex);   //解鎖

sleep(100);            //啟用互斥量時也去除注釋,為程序排程提供時間

}return null;

}int main()

執行緒my_thread_1將共享資源字串share寫成aaaaaaaa,執行緒my_thread_2則將其寫成eeeeeeee

不啟用互斥量的情況下,兩個執行緒對共享資源的訪問是隨機並且無規律,相互干擾打斷,產生ae混合的字串,這顯然不是我們期望的結果。

啟用互斥量(去掉注釋)情況下,互斥量機制其作用,兩個執行緒同步協調地訪問共享資源share,產生aaaaaaaaeeeeeeee字串,符合我們的預期。

通過該示例,讀者可以直觀地感受到互斥量的作用,親身體會互斥量機制,同時能讓讀者了解互斥量的內在原理。

來自 <>

C C 多執行緒程式設計之四 終止pthread執行緒

多執行緒程式設計之終止pthread執行緒 pthread是posix threads的簡稱,是posix的執行緒標準。終止執行緒似乎是多執行緒程式設計的最後一步,但絕不是本系列教材的結束。執行緒建立到執行緒終止,希望先給讀者乙個關於多執行緒程式設計的整體認識。1.終止pthread執行緒 pthr...

多執行緒程式設計之執行緒取消

關鍵 pthread cancel函式傳送 終止訊號 pthread setcancelstate函式 設定終止方式 pthread testcancel函式取消執行緒 另一功能是 設定取消點 1 執行緒取消的定義 一般情況下,執行緒在其主體函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行...

C C 多執行緒基礎程式設計

1.基本的阻塞型實現 multi thread.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include pch.h include include include using namespace std void thread01 void thread02 int main...