MST

星途 面试题库

面试题:C语言中Linux条件变量如何初始化

在Linux环境下使用C语言实现线程同步,简述条件变量初始化的函数及参数,并写出初始化条件变量的代码示例。
22.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

条件变量初始化的函数及参数

在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;
}