執行緒——多執行緒賣票
阿新 • • 發佈:2019-01-12
#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; }