博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程的条件变量实例
阅读量:6721 次
发布时间:2019-06-25

本文共 2788 字,大约阅读时间需要 9 分钟。

情景1:

Jack开着一辆出租车来到一个网站停车。看见没人就走了。过段时间。Susan来到网站准备乘车。可是没有来,于是就等着。过了一会Mike开着车来到了这个网站,Sunsan就上了Mike的车走了。如图所看到的:

程序实现该情景:

#include 
#include
#include
#include
pthread_cond_t taxicond = PTHREAD_COND_INITIALIZER;pthread_mutex_t taximutex = PTHREAD_MUTEX_INITIALIZER;void *traveler_arrive(void *name){ char *p = (char *)name; printf ("Travelr: %s need a taxi now!\n", p); pthread_mutex_lock(&taximutex); pthread_cond_wait(&taxicond, &taximutex); pthread_mutex_unlock(&taximutex); printf ("traveler: %s now got a taxi!\n", p); pthread_exit(NULL);}void *taxi_arrive(void *name){ char *p = (char *)name; printf ("Taxi: %s arrives.\n", p); pthread_cond_signal(&taxicond); pthread_exit(NULL);}int main (int argc, char **argv){ char *name; pthread_t thread; pthread_attr_t threadattr; pthread_attr_init(&threadattr); name = "Jack"; pthread_create(&thread, &threadattr, taxi_arrive, name); sleep(1); name = "Susan"; pthread_create(&thread, &threadattr, traveler_arrive, name); sleep(1); name = "Mike"; pthread_create(&thread, &threadattr, taxi_arrive, name); sleep(1); return 0;} /* ----- End of main() ----- */
情景2:

Jack开着一辆出租车来到一个网站停车,看见没人就等着。过段时间,Susan来到网站准备乘车看见了Jack的出租车,于是就上去了。过了一会Mike开着车来到了这个网站,看见没人救等着。

如图所看到的:

程序实现该情景:

#include 
#include
#include
#include
int travelercount = 0;pthread_cond_t taxicond = PTHREAD_COND_INITIALIZER;pthread_mutex_t taximutex = PTHREAD_MUTEX_INITIALIZER;void *traveler_arrive(void *name){ char *p = (char *)name; pthread_mutex_lock(&taximutex); printf ("traveler: %s need a taxi now!\n", p); travelercount++; pthread_cond_wait(&taxicond, &taximutex); pthread_mutex_unlock(&taximutex); printf ("traveler: %s now got a taxi!\n", p); pthread_exit(NULL);}void *taxi_arrive(void *name){ char *p = (char *)name; printf ("Taxi: %s arrives.\n", p); for(;;){ if(travelercount){ pthread_cond_signal(&taxicond); travelercount--; break; } } pthread_exit(NULL);}int main (int argc, char **argv){ char *name; pthread_t thread; pthread_attr_t threadattr; pthread_attr_init(&threadattr); name = "Jack"; pthread_create(&thread, &threadattr, taxi_arrive, name); sleep(1); name = "Susan"; pthread_create(&thread, &threadattr, traveler_arrive, name); sleep(3); name = "Mike"; pthread_create(&thread, &threadattr, taxi_arrive, name); sleep(4); return 0;} /* ----- End of main() ----- */

author: fulinux

E-mail: fulinux@sina.com

blog: blog.csdn.net/fulinus

转载于:https://www.cnblogs.com/clnchanpin/p/6910099.html

你可能感兴趣的文章
Oracle日常维护操作笔记(一)
查看>>
网管必懂的几个概念
查看>>
puppet 部署
查看>>
ISCSI文件存储
查看>>
求助:关于windows飞信机器人的问题
查看>>
我的友情链接
查看>>
关于初步搭建完成SSH环境之后,JUnit test 测试成功,页面测试时:@Resource 注入的dao为null...
查看>>
更强大的 code generator 自定义工具
查看>>
PHP 在大多数 Unix 平台
查看>>
革命老区江西省赣州市开发区政府暴力强拆
查看>>
extmail搭建
查看>>
FlowChart.NET中如何更改撤消或重做的属性
查看>>
【进阶篇】Android学习笔记——TextInputLayout
查看>>
python list转换字符串报错TypeError: sequence item 0: expe
查看>>
我的友情链接
查看>>
Android、iOS和Windows Phone中的推送技术
查看>>
活动目录管理工具---使用保存的查询
查看>>
MFC读写文件
查看>>
Ansible8:Playbook循环
查看>>
海淘也疯狂 跨境电商网站8月监测报告
查看>>