关于多线程与门票的问题
程序员文章站
2022-05-02 16:56:03
...
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define SIZE 10
pthread_mutex_t mutex; 定义锁
int ticketcount = 100; 定义门票数
void delay() 一个延时函数
{
int i = 5000, j;
while(i > 0)
{
j = 10000;
while(j > 0)
{
j--;
}
i--;
}
}
void *ticket(void *arg) //买票功能函数
{
int cur_ticket; //定义当前票数
while(1)
{
pthread_mutex_lock(&mutex); //给门上锁
cur_ticket = ticketcount; //把票数写过来
delay();
if(cur_ticket <= 0) //如果门票没了就结束线程并把锁打开
{
pthread_mutex_unlock(&mutex);
break;
}
printf("%lu mai %d\n", (unsigned long)pthread_self, cur_ticket);
cur_ticket--; //票数减一
ticketcount = cur_ticket; //把现在的票数写回去
pthread_mutex_unlock(&mutex); //开锁
}
}
int main()
{
int ret, i;
pthread_t tid[SIZE]; //定义10个线程
pthread_mutex_init(&mutex, NULL); //给上锁函数初始化
for(i = 0; i < SIZE; i++) //创建10个线程
{
ret = pthread_create(&tid[i], NULL, ticket, NULL);
if(ret != 0)
{
perror("pthread_create");
exit(1);
}
}
void *status;
for(i = 0; i < SIZE; i++) //回收10个线程
{
pthread_join(tid[i], &status);
}
pthread_mutex_destroy(&mutex); //销毁锁
return 0;
}
下一篇: (爬虫基础)爬取猫眼Top100电影