C语言pthread_cond_wait与pthread_cond_signal的使用
2016-08-12 18:07
381 查看
原文:http://pages.cs.wisc.edu/~remzi/OSTEP/threads-cv.pdf
举例:
运行状态存在两种情况。
第一,父线程创建了子线程后,继续运行本身后续代码,于是立即调用thread_join函数。在这个函数中,会对mutex加锁,并判断子线程是否结束。如果没结束,则自己睡眠;如果结束,则解锁mutex。最终,子线程运行,调用thread_exit函数来唤醒父线程。
第二,父线程创建了子线程后,子线程立即运行,将变量done设置为1,并调用thread_exit函数唤醒一个线程(但由于没有线程睡眠,于是没有任何影响)。父线程调用thread_join函数,发现变量done为1,于是不再等待,立即结束。
举例:
#include <stdio.h> #include <stdlib.h> #include <pthread.h> int done = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void thread_exit() { pthread_mutex_lock(&mutex); done = 1; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); } void *child(void *args) { printf("child\n"); thread_exit(); return NULL; } void thread_join() { pthread_mutex_lock(&mutex); while(done == 0) pthread_cond_wait(&cond, &mutex); pthread_mutex_unlock(&mutex); } int main() { pthread_t p; printf("parent begin\n"); pthread_create(&p, NULL, child, NULL); thread_join(); printf("parend end\n"); pthread_join(p, NULL); return 0; }
运行状态存在两种情况。
第一,父线程创建了子线程后,继续运行本身后续代码,于是立即调用thread_join函数。在这个函数中,会对mutex加锁,并判断子线程是否结束。如果没结束,则自己睡眠;如果结束,则解锁mutex。最终,子线程运行,调用thread_exit函数来唤醒父线程。
第二,父线程创建了子线程后,子线程立即运行,将变量done设置为1,并调用thread_exit函数唤醒一个线程(但由于没有线程睡眠,于是没有任何影响)。父线程调用thread_join函数,发现变量done为1,于是不再等待,立即结束。
相关文章推荐
- 多线程中pthread_cond_signal和pthread_cond_wait的使用
- 条件锁(条件Mutex)pthread_cond_wait、pthread_cond_signal、pthread_cond_broadcast的使用
- pthread_cond_signal()和pthread_cond_wait()的典型使用方法
- 多线程中pthread_cond_signal和pthread_cond_wait的使用
- pthread_cond_wait和pthread_cond_signal以及互斥变量的使用情况
- 条件锁(条件Mutex)pthread_cond_wait、pthread_cond_signal、pthread_cond_broadcast的使用[转]
- 条件锁(条件Mutex)pthread_cond_wait、pthread_cond_signal、pthread_cond_broadcast的使用
- 互斥量、条件变量与pthread_cond_wait()函数的使用,详解
- 线程中的条件变量pthread_cond_wait、pthread_cond_signal
- 使用pthread_cond_timedwait把一个线程作为一个定时器使用.
- 原创 使用pthread_cond_timedwait把一个线程作为一个定时器使用.
- 线程间通讯《代码》pthread_cond_wait/signal
- Linux下c开发 之 线程通信与pthread_cond_wait()的使用
- 互斥量、条件变量与pthread_cond_wait()函数的使用
- pthread_cond_broadcast和pthread_cond_wait的使用
- pthread_cond_wait()与pthread_cond_signal()
- pthread_cond_wait()的使用方法
- posix多线程程序使用条件变量 pthread_cond_signal
- pthread_cond_wait and pthread_cond_signal
- 线程中的条件变量pthread_cond_wait、pthread_cond_signal