linux程式設計 執行緒 互斥鎖

2021-08-07 07:23:27 字數 1650 閱讀 5056

執行緒間同步機制

互斥鎖通訊機制

互斥以排他方式防止共享資料被併發修改。

(1)在訪問該資源前,首先申請該互斥鎖,如果該互斥處於開鎖狀態,則申請到該鎖物件,

並立即占有該鎖,以防止其他執行緒訪問該資源。如果該互斥鎖處於鎖定狀態,預設阻塞等待。

(2)只有鎖定該互斥鎖的程序才能釋放該互斥鎖,其他執行緒的釋放操作無效。

初始化鎖

靜態初始化互斥鎖

pthread_mutex_t mutex = pthread_mutex_initializer;

動態初始化互斥鎖

int pthread_mutex_init(pthread_mutex_t *restrict mutex,

const pthread_mutexattr_t *restrict attr);

銷毀互斥鎖

int pthread_mutex_destroy(pthread_mutex_t *mutex);

申請互斥鎖

int pthread_mutex_lock(pthread_mutex_t *mutex);

以非阻塞方式申請互斥鎖

int pthread_mutex_trylock(pthread_mutex_t *mutex);

釋放互斥鎖

int pthread_mutex_unlock(pthread_mutex_t *mutex);    

程式示例如下

程式共兩個執行緒,乙個執行緒負責從輸入裝置讀取資料,然後存在在全域性變數中,

另乙個執行緒負責將全域性變數輸出到輸出裝置中。

#include

#include

#include

#include

#include

#include

void *tfun(void *arg);

pthread_mutex_t gmutex;

#define buf 1024

char gdata[buf];

int gtime = 0;

int main(int argc,char*argv)

res = pthread_create(&th1,0,tfun,0);

if(res != 0)

pthread_mutex_lock(&gmutex);

printf("input some text,enter 'exit' to finished\n");

while(!gtime)

else

break;

}        

}pthread_mutex_unlock(&gmutex);

printf("\n waiting for thread to finish ...\n");

res = pthread_join(th1,&thret);

if(res != 0)

pthread_mutex_destroy(&gmutex);

exit(0);    

}void *tfun(void * arg)

}gtime = 1;

gdata[0] = '\0';

pthread_mutex_unlock(&gmutex);

pthread_exit(0);

}

Linux多執行緒程式設計 執行緒互斥鎖

通過下面的練習加深對執行緒的概念的理解,同時明確執行緒的控制。從而進一步了解執行緒的互斥,並學會利用pthread庫。定義乙個用於互斥的互斥鎖 和乙個主函式和兩個子執行緒都能訪問的共享變數,乙個主函式和兩個用來建立子執行緒的子函式 在主函式中定義兩個子執行緒id的變數,初始化互斥鎖,建立對應函式的子...

linux執行緒互斥鎖

使用執行緒編寫程式需要技巧,而多執行緒的程式中的bug非常難以跟蹤 除錯,因為這些bug經常是難以再現的。競爭條件 當乙個執行緒訪問乙個資料結構的時候,另乙個執行緒也訪問同乙個資料結構,這時就出現了競爭條件 兩個執行緒 也可能是多個 競爭對同乙個資源的訪問。當其中乙個執行緒處理到一部分的時候,另外的...

linux 執行緒互斥鎖

一,鎖的建立 鎖可以被動態或靜態建立,可以用巨集pthread mutex initializer來靜態的初始化鎖,採用這種方式比較容易理解,互斥鎖是pthread mutex t的結構體,而這個巨集是乙個結構常量,如下可以完成靜態的初始化鎖 pthread mutex t mutex pthrea...