要向全局變量添加互斥鎖,可以使用Linux系統提供的pthread庫中的互斥鎖。以下是一個示例代碼:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int global_var = 0;
pthread_mutex_t mutex;
void* thread_function(void* arg) {
// 加鎖
pthread_mutex_lock(&mutex);
// 修改全局變量
global_var++;
// 解鎖
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t thread1, thread2;
// 初始化互斥鎖
pthread_mutex_init(&mutex, NULL);
// 創建線程
pthread_create(&thread1, NULL, thread_function, NULL);
pthread_create(&thread2, NULL, thread_function, NULL);
// 等待線程結束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
// 打印最終結果
printf("global_var = %d\n", global_var);
// 銷毀互斥鎖
pthread_mutex_destroy(&mutex);
return 0;
}
在上述代碼中,我們使用了pthread庫中的pthread_mutex_t數據類型來定義一個互斥鎖變量mutex。在各個線程中修改全局變量global_var之前,先使用pthread_mutex_lock函數來加鎖,然后修改完全局變量后使用pthread_mutex_unlock函數來解鎖。這樣可以保證在同一時間只有一個線程可以修改全局變量,避免了競爭條件的發生。最后,通過pthread_mutex_init和pthread_mutex_destroy來初始化和銷毀互斥鎖。
需要注意的是,不要忘記在每個線程中使用pthread_mutex_lock和pthread_mutex_unlock成對出現,否則可能導致死鎖或其他問題。