在Linux中,mutex_lock()
函數用于獲取互斥鎖(mutex lock)。它的用法是在代碼塊中調用該函數來獲取互斥鎖,以確保同一時間只有一個線程可以訪問共享資源。
mutex_lock()
函數的原型如下:
int mutex_lock(pthread_mutex_t *mutex);
參數mutex
是一個指向pthread_mutex_t
類型的互斥鎖變量的指針。
調用mutex_lock()
函數會嘗試獲取互斥鎖,如果互斥鎖當前處于可用狀態(沒有其他線程持有該鎖),則該線程成功獲取鎖并繼續執行。如果互斥鎖當前已被其他線程持有,則該線程將被阻塞,并等待互斥鎖可用。
當線程成功獲取互斥鎖時,應該確保在不再需要訪問共享資源時及時釋放互斥鎖,以允許其他線程獲取鎖并訪問共享資源。釋放互斥鎖可以使用mutex_unlock()
函數。
下面是一個簡單的示例代碼,演示了mutex_lock()
函數的用法:
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex; // 定義互斥鎖
void* thread_function(void* arg) {
pthread_mutex_lock(&mutex); // 獲取互斥鎖
// 訪問共享資源
printf("Thread %d is accessing the shared resource.\n", *(int*)arg);
pthread_mutex_unlock(&mutex); // 釋放互斥鎖
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_mutex_init(&mutex, NULL); // 初始化互斥鎖
int id1 = 1;
pthread_create(&thread1, NULL, thread_function, &id1); // 創建線程1
int id2 = 2;
pthread_create(&thread2, NULL, thread_function, &id2); // 創建線程2
pthread_join(thread1, NULL); // 等待線程1結束
pthread_join(thread2, NULL); // 等待線程2結束
pthread_mutex_destroy(&mutex); // 銷毀互斥鎖
return 0;
}
在這個例子中,我們創建了兩個線程,它們都會執行thread_function()
函數。每個線程在執行該函數時都會嘗試獲取互斥鎖,然后訪問共享資源并打印一條消息。當一個線程獲取到互斥鎖時,另一個線程將被阻塞,直到互斥鎖被釋放。
需要注意的是,互斥鎖的初始化和銷毀可以使用pthread_mutex_init()
和pthread_mutex_destroy()
函數進行。