linux C執行緒雜記

2021-06-13 12:16:54 字數 1035 閱讀 7597

以前學作業系統的程序和執行緒管理時,經常聽到互斥加鎖解鎖之類的概念,但是幾乎很少在程式設計中用到,今天看《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...