#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
// 设置全局变量
// 信号量
sem_t sem;
// 票
long ticket = 100;
// 卖票
void *(sellticket) (void *v)
{
// 窗口号
long num = (long)v;
srand((unsigned int)time(NULL));
while (1)
{
usleep(100000*(rand()%10+1));
// p操作
sem_wait(&sem);
if (0 == ticket)
{
printf ("票卖完了!\n");
sem_post(&sem);
break;
}
printf ("%ld 窗口卖了一张票,座位号为:%ld\n", num, ticket);
ticket -= 1;
// v操作
sem_post(&sem);
}
}
int main()
{
long i;
for (i = 0; i < 4; i++)
{
pthread_t thread;
pthread_create(&thread, NULL, sellticket, (void *)(i+1));
// 线程分离
pthread_detach(thread);
}
//
sem_init(&sem, 0, 1);
// 结束线程
pthread_exit(NULL);
return 0;
}
多线程卖票
最新推荐文章于 2022-07-20 14:47:07 发布