面试题答案
一键面试条件变量初始化的函数及参数
在Linux环境下,使用pthread_cond_init
函数来初始化条件变量。其函数原型为:
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
cond
:指向要初始化的条件变量的指针。attr
:指向条件变量属性的指针。如果为NULL
,则使用默认属性。
初始化条件变量的代码示例
#include <pthread.h>
#include <stdio.h>
// 定义条件变量
pthread_cond_t cond;
// 定义互斥锁
pthread_mutex_t mutex;
void* thread_function(void* arg) {
// 加锁
pthread_mutex_lock(&mutex);
printf("线程等待条件变量...\n");
// 等待条件变量,这里会自动解锁mutex,并在条件满足时重新加锁
pthread_cond_wait(&cond, &mutex);
printf("条件变量已满足,线程继续执行...\n");
// 解锁
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
// 初始化互斥锁
pthread_mutex_init(&mutex, NULL);
// 初始化条件变量
pthread_cond_init(&cond, NULL);
pthread_t thread;
// 创建线程
pthread_create(&thread, NULL, thread_function, NULL);
// 主线程等待一段时间
sleep(2);
// 加锁
pthread_mutex_lock(&mutex);
printf("主线程发送条件变量信号...\n");
// 发送条件变量信号
pthread_cond_signal(&cond);
// 解锁
pthread_mutex_unlock(&mutex);
// 等待线程结束
pthread_join(thread, NULL);
// 销毁条件变量
pthread_cond_destroy(&cond);
// 销毁互斥锁
pthread_mutex_destroy(&mutex);
return 0;
}