互斥量是乙個可以處於兩態之一的變數:解鎖和加鎖。
為控制對關鍵**的訪問,必須在進入這段**之前鎖住乙個互斥量,然後在完成操作之後解鎖它。
**: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賦給變數就行了...