| 函數 | 用途 |
|---|---|
pthread_mutex_init(&mutex, NULL) | 初始化互斥鎖 |
pthread_mutex_lock(&mutex) | 鎖定(阻塞直到取得) |
pthread_mutex_unlock(&mutex) | 解鎖 |
pthread_mutex_destroy(&mutex) | 銷毀互斥鎖 |
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
static int value = 0;
pthread_mutex_t mutex;
void *func(void *arg) {
while (1) {
pthread_mutex_lock(&mutex);
sleep(1); // 模擬工作
value++;
printf("value = %d\n", value);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main(void) {
pthread_t tid1, tid2;
pthread_mutex_init(&mutex, NULL);
pthread_create(&tid1, NULL, func, NULL);
pthread_create(&tid2, NULL, func, NULL);
while (1) sleep(1); // 主執行緒等待
return 0;
}
gcc mutex.c -o mutex -lpthread
必須連結 pthread 庫。輸出將交替顯示兩執行緒遞增的值,無競爭條件。
value 必須受互斥鎖保護sleep(1) 在鎖定區內,確保交替執行可見