/*
compile:
g++ -D_REENTRANT -lpthread xx.cpp
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
int ticket = 20;
sem_t mutex;
void* thread_function(void* p)
{
while (1)
{
sem_wait(&mutex);
if (ticket > 0)
printf("%s sell the %dth ticket.\n", (char*)p, ticket--);
else
{
sem_post(&mutex);
break;
}
sem_post(&mutex);
sleep(1);
}
return NULL;
}
int main()
{
sem_init(&mutex, 0, 1);
pthread_t t1, t2, t3;
pthread_create(&t1, NULL, thread_function, (void*)"WINDOW 1");
pthread_create(&t2, NULL, thread_function, (void*)"WINDOW 2");
pthread_create(&t3, NULL, thread_function, (void*)"WINDOW 3");
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_join(t3, NULL);
sem_destroy(&mutex);
return 0;
}
Linux使用信号量解决线程互斥问题(卖票程序)
最新推荐文章于 2022-06-26 16:04:23 发布
本文展示了一个基于多线程的售票系统实现案例。该系统使用了三个窗口并发售出20张票,通过信号量来同步和互斥访问共享资源,确保票务操作的正确性和线程安全。

1336

被折叠的 条评论
为什么被折叠?



