#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賦值。那麼...