linux多執行緒程式設計-互斥鎖
鎖機制多執行緒之間可能需要互斥的訪問一些全域性變數,這就需要互斥的來訪問,這些需要共享訪問的字段被稱作是臨界資源,訪問臨界資源的程式段稱作是臨界區。
實現執行緒間的互斥與同步機制的是鎖機制,下面是常用的鎖機制的函式和類
pthread_mutex_t mutex 鎖物件
pthread_mutex_init(&mutex,null) 在主線程中初始化鎖為解鎖狀態
pthread_mutex_t mutex = pthread_mutex_initializer 編譯時初始化鎖位解鎖狀態
pthread_mutex_lock(&mutex)(阻塞加鎖)訪問臨界區加鎖操作
pthread_mutex_trylock( &mutex)(非阻塞加鎖); pthread_mutex_lock() 類似,不同的是在鎖已經被佔據時返回 ebusy 而不是掛起等待。
pthread_mutex_unlock(&mutex): 訪問臨界區解鎖操作
#include
#include
#include
#include
#include
void* ticketport1(void*);
void* ticketport2(void*);
int tickets=100;
pthread_mutex_t mutex;
int main()
int ret;
pthread_t id1,id2;
pthread_mutex_init(&mutex,null); 初始化互斥量 ret=pthread_create(&id1,null,ticketport1,null);
if(ret<0) else
pthread_mutex_unlock(&mutex); //給互斥量解鎖
break;
pthread_yield(); //執行緒的排程函式,使兩個執行緒都有執行機會
return (void*)0;
void* ticketport2(void* arg)
while(1)
pthread_mutex_lock(&mutex); //給互斥量上鎖
if(tickets>0)
usleep(1000);
printf("thread2 sell ticket: %d",tickets--); pthread_mutex_unlock(&mutex); //給互斥量解鎖
} else
pthread_mutex_unlock(&mutex); //給互斥量解鎖
break;
pthread_yield(); //執行緒的排程函式,使兩個執行緒都有執行機會
return (void*)0;
我們用pthread_mutext_init函式來初始化互斥量,然後再用pthread_mutex_lock函式和 pthread_mutext_unlock分別進行上鎖和解鎖,至於這兩個函式的引數說明,大家可以上網查閱,在這我只說明功能。我們用gcc帶選項 -lpthread編譯後多次執行發現即使強制執行緒在很短的時間內(如1ms)睡眠引起執行緒切換,也不會導致上述的問題,說明互斥鎖可以解決執行緒間的同步 問題
linux多執行緒
linux下為了多執行緒同步,通常用到鎖的概念。posix下抽象了乙個鎖型別的結構 ptread mutex t。通過對該結構的操作,來判斷資源是否可以訪問。顧名思義,加鎖 lock 後,別人就無法開啟,只有當鎖沒有關閉 unlock 的時候才能訪問資源。它主要用如下5個函式進行操作。1 pthre...
linux多執行緒
執行緒標識 就像每個程序都有乙個id一樣,執行緒也有自己的id。程序id用pid t來表示,他是乙個unsigned int。程序id用pthread t來表示,pthread t不能把它當整數處理。程序可以通過pthread self 函式獲得自身的執行緒id。執行緒建立 在程序中只有乙個控制線程...
Linux多執行緒
一 執行緒的特點 1.執行緒是程序的乙個執行流,是cpu排程和分配的基本單位。執行緒是程式執行的最小單位。2.執行緒不會影響到其它執行緒的執行。比如乙個執行緒崩潰,其它執行緒正常執行。3.同一程序內的執行緒共享程序的位址空間。二 乙個執行緒的組成 1.乙個指向當前被執行指令的指令指標 2.乙個棧空間...