Linux UNIX學習之執行緒同步(鎖 互斥量)

2021-09-25 01:34:17 字數 965 閱讀 9260

互斥量:可以幫助執行緒同步同步對共享資源的使用,以防如下情況發生:執行緒某甲試圖訪問一共享變數時,執行緒某已正在對其進行修改。

為了避免執行緒更新變數時出現問題,必須使用互斥量來確保同時僅有乙個執行緒可以訪問某項資源。任何時候,至多只有乙個執行緒可以鎖定該互斥量。一般情況下,對每一共享資源會使用不同的互斥量,每乙個執行緒在訪問同一資源時採用如下協議:

即同時只有乙個執行緒能夠進入這段**區域,如下圖所示:

互斥量既可以像靜態變數那樣分配,也可以在執行時動態建立。互斥量屬於pthread_mutex_t型別的變數。在使用之前必須對其初始化。對於靜態分配的互斥量而言,一般採用如下方式初始化:

pthread_mutex_t mtx = pthread_mutex_initializer
加鎖和解鎖互斥量

初始化後,互斥量處於未鎖定狀態。可以採用如下函式對其解鎖和鎖定。

#include int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

both return 0 on success,or a positive error number on error

事例**如下所示:

#include #include "tlpi_hdr.h"

static int glob =0;

static pthread_mutex_t mtx = pthread_mutex_initializer;

static void* threadfunc(void* arg)

linux unix學習之檔案程式設計一

linux檔案程式設計操作中有 一 系統檔案呼叫 只能在linux系統中呼叫 二 c檔案庫函式呼叫 可以在任何系統中呼叫 系統檔案的呼叫 需要的包含的標頭檔案 include include include 1.open函式 int open const char pathname,int flag...

linux unix學習之檔案程式設計二

6.lseek函式 off t lseek int fildes,off t offset int whence fildes 已開啟的檔名 offset 為根據引數whence來移動讀寫位置的位移數 whence seek set 引數offset即為新的讀寫位置。seek cur 以目前的讀寫位...

windows和linux unix多執行緒的區別

有一面試被問到了windows和linux多執行緒的區別,特地整理一下,內容全來自網路,如有錯誤請指正!1 win32裡的程序 執行緒是繼承自os 2的。在win32裡,程序 是指乙個程式,一般指乙個軟體,例如chrome瀏覽器,但是chrome 會生成好幾個後台程序 為了搶占cpu?乙個程序裡包含...