Ubuntu C语言多线程火车售票模拟程序
#include <stdio.h> #include <pthread.h>
int tickets = 15; // 票数 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 互斥锁
void *sell_ticket1(void *arg) // 售票点1 { while (1) { pthread_mutex_lock(&mutex); // 上锁 if (tickets > 0) { // 还有票 printf("W1: %d tickets are left\n", tickets); tickets--; } else { // 没有票了 pthread_mutex_unlock(&mutex); // 解锁 break; } pthread_mutex_unlock(&mutex); // 解锁 sleep(1); // 延时1秒 } pthread_exit(NULL); }
void *sell_ticket2(void *arg) // 售票点2 { while (1) { pthread_mutex_lock(&mutex); // 上锁 if (tickets > 0) { // 还有票 printf("W2: %d tickets are left\n", tickets); tickets--; } else { // 没有票了 pthread_mutex_unlock(&mutex); // 解锁 break; } pthread_mutex_unlock(&mutex); // 解锁 sleep(2); // 延时2秒 } pthread_exit(NULL); }
int main() { pthread_t tid1, tid2; // 线程id
// 创建线程
pthread_create(&tid1, NULL, sell_ticket1, NULL);
pthread_create(&tid2, NULL, sell_ticket2, NULL);
// 等待线程结束
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
printf("w2:5 tickets were sold from window 2\n");
printf("w1:10 tickets were sold from window 1\n");
return 0;
}
原文地址: https://www.cveoy.top/t/topic/oj9F 著作权归作者所有。请勿转载和采集!