C语言pthread_cond_wait与pthread_cond_signal的使用
来源:互联网 发布:ios更新系统 数据丢失 编辑:程序博客网 时间:2024/03/28 21:49
原文:http://pages.cs.wisc.edu/~remzi/OSTEP/threads-cv.pdf
举例:
#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,于是不再等待,立即结束。
0 0
- C语言pthread_cond_wait与pthread_cond_signal的使用
- 多线程中pthread_cond_signal和pthread_cond_wait的使用
- pthread_cond_wait()与pthread_cond_signal()
- 详解pthread_cond_wait与pthread_cond_signal
- pthread_cond_wait与pthread_cond_signal
- pthread_cond_signal与pthread_cond_wait详解
- pthread_cond_signal与pthread_cond_wait详解
- pthread_cond_wait()与pthread_cond_signal()
- pthread_cond_wait()与pthread_cond_signal()
- pthread_cond_signal与pthread_cond_wait详解
- pthread_cond_signal与pthread_cond_wait详解
- pthread_cond_signal与pthread_cond_wait
- pthread_cond_wait()与pthread_cond_signal()
- pthread_cond_signal与pthread_cond_wait详解
- 条件锁(条件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_signal() 的理解
- pthread_cond_signal pthread_cond_wait
- javascript中的||操作符与&&操作符
- 彻底解决数据库去中心化问题
- “睡城”通州的逆袭:房价大涨40% 限制人口落户
- String详解(一):如何理解String
- php 将中文字符串转成汉语拼音
- C语言pthread_cond_wait与pthread_cond_signal的使用
- kubernetes实战-基于redis和docker的留言簿案例
- 一致性Hash
- C++ 内存分配(new,operator new)
- C++ 神秘的随机数
- nginx 工作原理
- 玫瑰花数
- 微信获取关注者姓名
- 通州商务中心区规划亮相