您好,登錄后才能下訂單哦!
線程間的數據共享
多個線程共享數據, A線程生產物品,產品數量增加,B線程使用,那么產品數量減少,B線程如何知道產品buf是否為空呢?A線程如何判斷產品buf為滿?
1 輪詢機制
線程每隔一定時間檢查緩沖區,如果有產品就取出,這種機制需要控制好輪詢間隔,查詢太頻繁會導致占用cpu過多,浪費;查詢太不頻繁導致緩沖區滿,生產者放不進去產品
int buf[MAX];
int ProductionCount;
while(1)
{
Msleep(100);
if(ProductionCount > 0)
{
use it;
ProductionCount --;
}
}
2,信號量機制
信號量和線程,互斥鎖等一樣,是操作系統提供的功能
對于上述問題,可以創建一個信號量對象,生產線程每次生產完可以調用post使得信號量+1,消費只調用wait函數;使信號量減1,如果信號量為0,消費線程會等待,,
Semaphore sem(0);
A線程
while(1)
{
...
sem.post();
}
B線程
while(1)
{
....
sem.wait(); //如果信號量為0,那么會等待,
}
超時等待
int res = sem。wait(1000); //ms
if( res != 0)
。。。。。;
如果等待超過 1000秒,那么res返回 !0,可以執行某些操作。。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。