牛刀小試:售票系統
功能:詢問是否購票,輸入y/Y表示購票,輸入其他字元表示不購票,跳轉到退票功能。退票功能輸入Y/y退票,輸入其他字元再跳轉到購票功能。讓使用者在購票和退票功能之間選擇。
代碼:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>void *task_sale(void *arg);
void *task_add(void *arg);pthread_t tid[2];
pthread_mutex_t lock;
int ticket = 5;int main(void)
{
int ret;
pthread_mutex_init(&lock,NULL);
pthread_create(&tid[0],NULL,task_sale,(void*)1);
pthread_create(&tid[1],NULL,task_add,(void*)2);
pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);
pthread_mutex_destroy(&lock);
pthread_exit(NULL);
}
void *task_sale(void *arg)
{
char s[1];
printf(“This thread %ld\r\n”,(intptr_t)(int *)arg);
while(1)
{
memset(s,0,sizeof(s));
pthread_mutex_lock(&lock);
printf(“現在有餘票:%d\r\n”,ticket);
if(ticket > 0)
{
printf(“是否購票?購票請輸入Y/y\r\n”);
scanf("%s",s);
if(strncmp(s,“y”,1)==0)
{
ticket–;
printf(“購票成功,剩餘:%d\r\n”,ticket);
sleep(1);
pthread_mutex_unlock(&lock);
}
else
{
pthread_mutex_unlock(&lock);
usleep(500);
}
}
else
{
printf("沒票了還買啥,走路去吧\r\n");
pthread_mutex_unlock(&lock);
sleep(2);
}
}
pthread_exit(NULL);
}
void *task_add(void *arg)
{
char a[1];
printf(“這是退票視窗%ld\r\n”,(intptr_t)(int *)arg);
while(1)
{
memset(a,0,sizeof(a));
pthread_mutex_lock(&lock);
printf(“現在票倉有票:%d\r\n”,ticket);
if(ticket <5 )
{
printf(“是否退票?退票請輸入Y/y\r\n”);
scanf("%s",a);
if(strncmp(a,“y”,1)==0)
{
ticket++;
printf(“退票成功,剩餘:%d\r\n”,ticket);
//system(“clear”);
sleep(1);
pthread_mutex_unlock(&lock);
}
else
{
//printf("不退湊啥熱鬧\r\n");
//system("clear");
pthread_mutex_unlock(&lock);
usleep(500);
}
}
else
{
printf("你都沒買你退啥,玩兒呢?\r\n");
pthread_mutex_unlock(&lock);
sleep(1);
}
}
pthread_exit(NULL);