线程实例 3人卖票
来源:互联网 发布:mac iphone 铃声 编辑:程序博客网 时间:2024/05/01 09:52
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
//#include <unistd.h>
//#include <errno.h>
#include <time.h>
pthread_mutex_t mutex;
pthread_cond_t cond1;
pthread_cond_t cond2;
pthread_cond_t cond3;
int ticket = 10;
void *sell_ticket1(void)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond1,&mutex);
if(ticket > 0)
{
printf("sell ticket1--> chool ticket:%d\n",ticket--);
//sleep(1);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_mutex_unlock(&mutex);
break;
}
}
return NULL;
}
void *sell_ticket2(void)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond2,&mutex);
if(ticket > 0)
{
//sleep(1);
printf("sell ticket2--> chool ticket:%d\n",ticket--);
//sleep(1);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_mutex_unlock(&mutex);
break;
}
}
}
void *sell_ticket3(void)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond3,&mutex);
if(ticket > 0)
{
//sleep(1);
printf("sell ticket3--> chool ticket:%d\n",ticket--);
//sleep(1);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_mutex_unlock(&mutex);
break;
}
}
return NULL;
}
int main()
{
int i=0,flog=0,ret=0;
pthread_t id1,id2,id3;
int old_ticket = ticket;
srand(time(NULL));
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond1,NULL);
pthread_cond_init(&cond2,NULL);
pthread_cond_init(&cond3,NULL);
ret = pthread_create(&id1, NULL, (void*)sell_ticket1, NULL);
if(ret == -1)
{
printf("create_thread1 error!\n");
exit(-1);
}
ret = pthread_create(&id2, NULL, (void*)sell_ticket2, NULL);
if(ret == -1)
{
printf("create_thread2 error!\n");
exit(-1);
}
ret = pthread_create(&id3, NULL, (void*)sell_ticket3, NULL);
if(ret == -1)
{
printf("create_thread3 error!\n");
exit(-1);
}
sleep(1);
for(i =0; i< old_ticket; i++)
{
flog = rand() % 3;
//printf("%d\n",flog);
switch(flog)
{
case 0: pthread_cond_signal(&cond1);break;
case 1: pthread_cond_signal(&cond2);break;
case 2: pthread_cond_signal(&cond3);break;
}
sleep(1);
}
pthread_cond_signal(&cond1);
sleep(1);
pthread_cond_signal(&cond2);
sleep(1);
pthread_cond_signal(&cond3);
sleep(1);
ret = pthread_join(id1, NULL);
if(ret == -1)
{
printf("join_thread1 error!\n");
exit(-1);
}
printf("id1 exit!\n");
ret = pthread_join(id2, NULL);
if(ret == -1)
{
printf("join_thread2 error!\n");
exit(-1);
}
printf("id2 exit!\n");
ret = pthread_join(id3, NULL);
if(ret == -1)
{
printf("join_thread3 error!\n");
exit(-1);
}
printf("id3 exit!\n");
return 0;
}
#include <stdlib.h>
#include <pthread.h>
//#include <unistd.h>
//#include <errno.h>
#include <time.h>
pthread_mutex_t mutex;
pthread_cond_t cond1;
pthread_cond_t cond2;
pthread_cond_t cond3;
int ticket = 10;
void *sell_ticket1(void)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond1,&mutex);
if(ticket > 0)
{
printf("sell ticket1--> chool ticket:%d\n",ticket--);
//sleep(1);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_mutex_unlock(&mutex);
break;
}
}
return NULL;
}
void *sell_ticket2(void)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond2,&mutex);
if(ticket > 0)
{
//sleep(1);
printf("sell ticket2--> chool ticket:%d\n",ticket--);
//sleep(1);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_mutex_unlock(&mutex);
break;
}
}
}
void *sell_ticket3(void)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond3,&mutex);
if(ticket > 0)
{
//sleep(1);
printf("sell ticket3--> chool ticket:%d\n",ticket--);
//sleep(1);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_mutex_unlock(&mutex);
break;
}
}
return NULL;
}
int main()
{
int i=0,flog=0,ret=0;
pthread_t id1,id2,id3;
int old_ticket = ticket;
srand(time(NULL));
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond1,NULL);
pthread_cond_init(&cond2,NULL);
pthread_cond_init(&cond3,NULL);
ret = pthread_create(&id1, NULL, (void*)sell_ticket1, NULL);
if(ret == -1)
{
printf("create_thread1 error!\n");
exit(-1);
}
ret = pthread_create(&id2, NULL, (void*)sell_ticket2, NULL);
if(ret == -1)
{
printf("create_thread2 error!\n");
exit(-1);
}
ret = pthread_create(&id3, NULL, (void*)sell_ticket3, NULL);
if(ret == -1)
{
printf("create_thread3 error!\n");
exit(-1);
}
sleep(1);
for(i =0; i< old_ticket; i++)
{
flog = rand() % 3;
//printf("%d\n",flog);
switch(flog)
{
case 0: pthread_cond_signal(&cond1);break;
case 1: pthread_cond_signal(&cond2);break;
case 2: pthread_cond_signal(&cond3);break;
}
sleep(1);
}
pthread_cond_signal(&cond1);
sleep(1);
pthread_cond_signal(&cond2);
sleep(1);
pthread_cond_signal(&cond3);
sleep(1);
ret = pthread_join(id1, NULL);
if(ret == -1)
{
printf("join_thread1 error!\n");
exit(-1);
}
printf("id1 exit!\n");
ret = pthread_join(id2, NULL);
if(ret == -1)
{
printf("join_thread2 error!\n");
exit(-1);
}
printf("id2 exit!\n");
ret = pthread_join(id3, NULL);
if(ret == -1)
{
printf("join_thread3 error!\n");
exit(-1);
}
printf("id3 exit!\n");
return 0;
}
0 0
- 线程实例 3人卖票
- JAVA线程实例-----卖票
- 线程,卖票
- 卖票线程
- 线程同步问题,线程上锁---多线程“卖票”实例
- 【第十五课】线程---线程的实例:卖票程序
- 【第十五课】线程---线程的实例:卖票程序(my)
- Java多线程通信、同步卖票实例--线程安全、详细注释
- 线程学习之卖票
- 线程同步,卖票
- 线程示例:多线程卖票
- 【线程】卖票系统
- 【线程】卖票系统②
- 用线程同步卖票
- java 线程同步--卖票问题
- 多线程演示:两个线程《卖票》
- Java 线程同步 卖票问题
- 线程基础二--卖票问题
- 51nod 1366 贫富差距【并查集+Floyd】
- 我眼中的CentOS 下 安全策略
- 结构体数组指针的使用
- 第十五周 项目3 -B-树的基本操作
- php判断各户端是否为手机端
- 线程实例 3人卖票
- 微信小程序开发—小程序框架详解(直播分享)
- 每日一则(1):==操作符比较规则
- Lua:一个Python的秘密武器
- android开发 -- 复制文本内容到系统剪贴板(自由复制)
- 顺序表的动态存储细节
- 头戴式眼动仪求解映射方法
- 二维数组地址的计算
- java socket通信 从客户端传数字到服务器动态显示