以前學作業系統的程序和執行緒管理時,經常聽到互斥加鎖解鎖之類的概念,但是幾乎很少在程式設計中用到,今天看《gnu/linux程式設計》的執行緒這章時,對c程式中如何給變數加鎖解鎖有了乙個大致的了解,現記錄如下:
互斥其實是保證執行緒在關鍵區正常執行的變數,同一時刻只能由某一程序訪問,要建立乙個關鍵區,首先得建立乙個互斥變數,然後用特殊的符號為其常量初始化。互斥變數宣告方法如下:
pthread_mutex_t test_mutex=pthread_mutex_initializer;
互斥變數初始化有三種型別,具體的型別請google搜尋。下面建立關鍵區:
pthread_mutex_t test_mutex=pthread_mutext_initializer;
/*進入關鍵區*/
assert(pthread_mutex_lock(&test_mutex)==0);
attr++; //要鎖定的變數,同一時刻只能某一線程訪問
assert(pthread_mutext_unlock(&test_mutex)==0);
/*退出關鍵區*/
關鍵區是同一時刻只允許某一線程執行的**段,關鍵區的存在是為了保護共享資源,避免多重訪問的發生。
pthread_mutex_trylock()方法與pthread_mutex_lock()的區別是trylock如果不能成功加鎖可以幹其他的事情,而不是阻塞於加鎖關鍵區,而lock則是如不能加鎖關鍵區則阻塞於此,直到可以加鎖為止。
互斥變數用完最後得銷毀,通過pthread_mutex_destroy()來銷毀即可。
乙個完整例項如下:
#include #include #include #define max 1000
#define max_thread 10
pthread_mutex_t mymutex = pthread_mutex_initializer;
long counter = 0l;
void *mythread(void *args)
{ int i, ret;
for(i=0; i
Linux c 執行緒入門
include include include include include void print msg1 void void print msg2 void void thread create pthread t thread 2 int main void print msg1 int f...
Linux C程序 執行緒
1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...
linux C 多執行緒
標頭檔案 include 執行緒建立 pthread create 執行緒退出 pthread exit 互斥鎖 pthread mutex init pthread mutex lock pthread mutex unlock void thread function void arg if 0...