用執行緒和互斥鎖實現的簡單的賣票系統

2021-08-06 06:23:10 字數 510 閱讀 5440

#include #include #include #include #include int ticket = 100;   // 票

// 互斥鎖

pthread_mutex_t mutex;

// 賣票執行緒

void *sale_ticket(void *v)

printf ("視窗 %d 賣票了一張票 : %d\n", window, ticket);

ticket--;

pthread_mutex_unlock(&mutex); }}

int main()

pthread_exit(null);

// 銷毀互斥鎖

pthread_mutex_destroy(&mutex);

return 0;

}

昨天是用共享記憶體和訊號量實現的,今天通過多執行緒和互斥鎖實現,執行緒相比較於程序,程序所消耗的cpu資源多,程序間通訊複雜,執行緒通訊簡單方便。

互斥鎖mutex的簡單實現

mutex一般用於為一段 加鎖,以保證這段 的原子性 atomic 操作,即 要麼不執行這段 要麼將這段 全部執行完畢。例如,最簡單的併發衝突問題就是乙個變數自增1 balance balance 1 表面看這是一條語句,可是在背後的彙編中我們可以看到,指令集操作過程中會引入中間變數來儲存右邊的值,...

互斥鎖mutex的簡單實現

mutex一般用於為一段 加鎖,以保證這段 的原子性 atomic 操作,即 要麼不執行這段 要麼將這段 全部執行完畢。例如,最簡單的併發衝突問題就是乙個變數自增1 balance balance 1 表面看這是一條語句,可是在背後的彙編中我們可以看到,指令集操作過程中會引入中間變數來儲存右邊的值,...

Go 互斥鎖和讀寫互斥鎖的實現

目錄 先來看這樣一段 所存在的問題 var wg sync.waitgroup var x int64 func main func f wg.done 這裡為什麼輸出是 12135 不同的機器結果不一樣 而不是20000。因為 x 的賦值,總共分為三個步驟 取出x的值 計算x的結果 給x賦值。那麼...