Linux程式設計 執行緒互斥量進行同步

2021-08-20 23:53:14 字數 1893 閱讀 4439

互斥量是乙個可以處於兩態之一的變數:解鎖和加鎖。

為控制對關鍵**的訪問,必須在進入這段**之前鎖住乙個互斥量,然後在完成操作之後解鎖它。

**:thread4.c

#include #include #include #include #include #include void *thread_function(void *arg);

pthread_mutex_t work_mutex; // 宣告乙個互斥量

#define work_size 1024

char work_area[work_size]; // 宣告工作區

int time_to_exit = 0; // 變數time_to_exit

int main()

res = pthread_create(&a_thread, null, thread_function, null); // 啟動新執行緒

if (res != 0)

// 主線程

// 首先給工作區加鎖,讀取文字到它裡面,然後解鎖以允許其他程序訪問它並統計字元數目

// 我們周期性地對互斥量再加鎖,檢查字元數目是否已統計完,如果還需要等待,就釋放互斥量,這種輪詢的方式

pthread_mutex_lock(&work_mutex);

printf("input some text. enter 'end' to finish\n");

while (!time_to_exit) else }}

pthread_mutex_unlock(&work_mutex);

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

res = pthread_join(a_thread, &thread_result);

if (res != 0)

printf("thread joined\n");

pthread_mutex_destroy(&work_mutex);

exit(exit_success);

}void *thread_function(void *arg)

}// 如果有退出程式的請求,就設定time_to_exit變數,再把工作區的第乙個字元設定為'\0',然後退出

time_to_exit = 1;

work_area[0] = '\0';

pthread_mutex_unlock(&work_mutex);

pthread_exit(0);

}

編譯(編譯時需要加選項 -lphread):

gcc -g thread4.c -o thread4 -lpthread
執行:

./thread4
結果:

input some text. enter 'end' to finish

whitasd

you input 7 characters

the crod

you input 8 characters

pthread

you input 7 characters

hah end

you input 7 characters

ednyou input 3 characters

endwaiting for thread to finish...

thread joined

學習pthreads,使用互斥量進行同步

在進行多執行緒程式設計時,我們總會遇到全域性變數和資料結構的問題,這是多執行緒之間進行通訊的問題。如果多個執行緒同時讀寫乙個全域性變數,那麼會造成競爭或者出錯。為了解決這一問題,我們需要對全域性資料進行,使用互斥量實現鎖的機制,當某個執行緒在某個操作前進行了加鎖,那麼某個操作只能在這個執行緒進行,直...

Linux 多執行緒互斥量互斥

同乙個程序中的多個執行緒共享所在程序的記憶體資源,當多個執行緒在同一時刻同時訪問同一種共享資源時,需要相互協調,以避免出現資料的不一致和覆蓋等問題,執行緒之間的協調和通訊的就叫做執行緒的同步問題,執行緒同步的思路 讓多個執行緒依次訪問共享資源,而不是並行 mutex被建立時可以有初始值,表示mute...

多執行緒程式設計 互斥量

pthreads 使用 pthread mutex t 型別的變數來表示互斥量,同時在使用互斥量進行同步前需要先對它進行初始化,可以用靜態或動態的方式對互斥量進行初始化。對於靜態分配的 pthread mutex t 變數來說,只要將 pthread mutex initializer賦給變數就行了...