面试题答案
一键面试互斥锁的作用
互斥锁(Mutex,即Mutual Exclusion的缩写)是一种同步原语,用于保护共享资源,确保在同一时间只有一个线程能够访问该资源,从而避免多个线程同时访问共享资源导致的数据竞争和不一致问题。
使用互斥锁同步线程的步骤
- 初始化互斥锁:使用
pthread_mutex_init
函数对互斥锁进行初始化。 - 加锁:在线程访问共享资源前,使用
pthread_mutex_lock
函数获取互斥锁,若互斥锁已被其他线程持有,则当前线程会被阻塞,直到获取到互斥锁。 - 解锁:在访问完共享资源后,使用
pthread_mutex_unlock
函数释放互斥锁,允许其他线程获取互斥锁访问共享资源。 - 销毁互斥锁:当不再需要使用互斥锁时,使用
pthread_mutex_destroy
函数销毁互斥锁,释放相关资源。
代码示例
#include <pthread.h>
#include <stdio.h>
// 共享资源
int shared_variable = 0;
// 互斥锁
pthread_mutex_t mutex;
// 线程执行函数
void* increment(void* arg) {
// 加锁
pthread_mutex_lock(&mutex);
shared_variable++;
printf("Thread incremented shared_variable to %d\n", shared_variable);
// 解锁
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t thread1, thread2;
// 初始化互斥锁
pthread_mutex_init(&mutex, NULL);
// 创建线程
pthread_create(&thread1, NULL, increment, NULL);
pthread_create(&thread2, NULL, increment, NULL);
// 等待线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
// 销毁互斥锁
pthread_mutex_destroy(&mutex);
return 0;
}