C 不用同步機制實現賣貨程式

2021-09-18 02:32:23 字數 1268 閱讀 1701

一 需求說明

夥計在賣商品時,每次賣出50元的貨物就會從顧客收到50元錢,老闆每隔一秒鐘去清點店裡貨物和金錢的總數,看總數有沒有變少。

二 不用執行緒同步設計方法

可以建立兩個執行緒,乙個執行緒代表夥計賣貨收線這個事務,另外乙個執行緒模擬老闆的對賬事務,也就是乙個執行緒對全域性變數進行寫操作,另外乙個執行緒對全域性變數進行讀操作。

三 **

#include #include #include int a = 200;   //代表貨物的價值,也就是有200元的貨物

int b = 100; //**金錢的價值,也就是由100元金錢

void* threada(void*) //模擬夥計賣貨收錢的過程

}void* threadb(void*) //模擬老闆對賬

}int main()

四 執行

[root@localhost test]# g++ -o test test.cpp -lpthread

[root@localhost test]# ./test

300300

250300

250300

250250

^c

五 程式說明

這個例子中,執行緒b每隔1秒檢查一下當前現金和貨物的總和是否是300,但列印來看,還是出現了列印250的現象,這是因為夥計在賣貨和收錢之間被老闆的對賬執行緒打斷了。

解決該問題的方法是互斥鎖。

六 臨界資源和臨界區的概念

臨界資源:是一次僅允許乙個執行緒使用共享資源,各個執行緒應該互斥地訪問臨界資源。

臨界區:每個執行緒中訪問臨界資源的那段**稱為臨界區,又稱臨界段。因為臨界資源要求每個執行緒互斥地對其訪問,所以每次只允許乙個執行緒進入臨界區,進入後其他執行緒不允許再進入,一直要等到臨界區中的執行緒退出。

七 執行緒進入臨界區需要遵循的原則

1 如果有若干執行緒要求進入空閒臨界區,一次僅允許乙個執行緒進入。

2 任何時候,處於臨界區的執行緒不可多餘乙個,若已有執行緒進入自己的臨界區,則其他所有試圖進入臨界區的程序必須等待。

3 進入臨界區的執行緒要在有限的時候內退出,以便其他執行緒能及時進入自己的臨界區。

4 如果程序不能進入自己的臨界區,則應讓出cpu,避免程序出現「忙等」現象。

同步機制 「讀寫鎖「的實現

同步機制 讀寫鎖 pj.courtois,f.heymans,and d.l.parnas mble research laboratory brussels,belgium 多程序同時訪問臨界區域 critical section 的問題可以看成兩類程序 讀者 readers 和寫者 writer...

Linux下C的執行緒同步機制

c裡提供了保證執行緒安全性的三種方法 新增標頭檔案 include,pthread 庫不是 linux 系統預設的庫,連線時需要使用靜態庫 libpthread.a,在編譯中要加 lpthread引數 通過鎖的機制實現執行緒間的互斥,同一時刻只有乙個執行緒可以鎖定它,當乙個鎖被某個執行緒鎖定的時候,...

Linux下C的執行緒同步機制

c裡提供了保證執行緒安全性的三種方法 新增標頭檔案 include,pthread 庫不是 linux 系統預設的庫,連線時需要使用靜態庫 libpthread.a,在編譯中要加 lpthread引數 通過鎖的機制實現執行緒間的互斥,同一時刻只有乙個執行緒可以鎖定它,當乙個鎖被某個執行緒鎖定的時候,...