面试题答案
一键面试互斥锁在Linux环境下C语言编程中有两种初始化方式:
- 静态初始化:
适用于互斥锁对象在编译时就确定的情况,使用
PTHREAD_MUTEX_INITIALIZER
宏。#include <pthread.h> #include <stdio.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void* thread_function(void* arg) { pthread_mutex_lock(&mutex); printf("Thread entered critical section\n"); // 临界区代码 pthread_mutex_unlock(&mutex); return NULL; } int main() { pthread_t thread; pthread_create(&thread, NULL, thread_function, NULL); pthread_join(thread, NULL); return 0; }
- 动态初始化:
适用于需要在运行时确定互斥锁属性等情况,使用
pthread_mutex_init
函数。#include <pthread.h> #include <stdio.h> pthread_mutex_t mutex; void* thread_function(void* arg) { pthread_mutex_lock(&mutex); printf("Thread entered critical section\n"); // 临界区代码 pthread_mutex_unlock(&mutex); return NULL; } int main() { pthread_t thread; pthread_mutex_init(&mutex, NULL); pthread_create(&thread, NULL, thread_function, NULL); pthread_join(thread, NULL); pthread_mutex_destroy(&mutex); return 0; }
在动态初始化时,需要注意在不再使用互斥锁后调用pthread_mutex_destroy
函数来释放相关资源。