pthread_mutex_lock(&shared_data.mutex); while (shared_data.value == 0) { pthread_cond_wait(&shared_data.cond, &shared_data.mutex); } printf("Value updated by callback: %d\n", shared_data.value); pthread_mutex_unlock(&shared_data.mutex);
时间: 2024-04-28 09:21:03 浏览: 69
pthread_cond_wait() 用法深入分析
这段代码是使用 POSIX 线程库中的互斥锁和条件变量实现线程同步的经典范例。简单地说,它的作用是等待共享数据 `shared_data.value` 的值变为非零,然后输出这个值,并且保证多个线程之间的访问是互斥的和同步的。
具体来说,`pthread_mutex_lock()` 函数用于获取互斥锁,如果锁已经被其他线程占用,则当前线程会被阻塞,直到锁被释放。然后,进入一个 while 循环,检查共享数据的值是否为零。如果是,则调用 `pthread_cond_wait()` 函数等待条件变量 `shared_data.cond` 的信号,此时当前线程会被阻塞,并释放之前获取的互斥锁,以允许其他线程访问共享数据。当条件变量被其他线程发送信号时,当前线程会被唤醒,重新获取互斥锁,然后重新检查共享数据的值。如果不是零,则输出这个值,并释放互斥锁,以允许其他线程访问共享数据。
最后,`pthread_mutex_unlock()` 函数用于释放互斥锁,以允许其他线程获取它。这样就保证了多个线程之间的访问是互斥的和同步的,从而避免了竞态条件和死锁等问题。
阅读全文