C 多執行緒 倉庫問題引發的故事

2022-01-31 03:15:43 字數 1384 閱讀 8971

假設有這麼個場景,乙個倉庫,裡面有n件貨物,現有六個搬運工(用執行緒模擬),其中2個向倉庫放東西,4個往外搬東西。假設1秒能向裡放2件貨物,同時可向外搬3件貨物(執行緒休眠),現在需要往裡放m件貨物,一旦倉庫有貨就要向外搬,這個東西怎麼設計?

這顯然牽扯到執行緒同步的問題。本來,考慮的有點簡單了,只用了乙個鎖,但結果是在執行乙個動作的同時,另乙個動作一直在等待(比如,放的時候,搬的執行緒等待放完後,才能開始執行),也就是在一秒內,只能放或者搬,這樣的話,還不如乙個執行緒全跑下來了,還省事。思考良久後,請教了一下,原來這種問題要放兩個執行緒鎖(對應兩個動作),恍然大悟。好了,別的不說了,直接上這貨的**吧:假設n和m都為15,標準情況下需要放乙個佇列,現在只用最簡單的數字來模擬吧

class

operator

}public

intpushtotal

}public

void setpushnum(int

t)

}public

void

push()

catch

(synchronizationlockexception e)

catch

(threadinterruptedexception e)

}else

,\t還需要放的數量:,\t搬運工:

", num, pushnum,

thread.currentthread.name);

lock

(locker2)}}

}}public

void

pull()

catch

(synchronizationlockexception e)

catch

(threadinterruptedexception e)

}else

\t搬運工:

",num , thread.currentthread.name);

} }}}

}

上面的紅色字型顯示了兩個執行緒鎖,以及啟用其他執行緒的時間段,下面貼上主線程:

static

void main(string

args)

}else

} while (true

); }

catch

(threadstateexception e)

catch

(threadinterruptedexception e)

}

效果圖如下:

當按下y後,繼續啟用等待的執行緒:

多執行緒引發的血案

我們的微服務閘道器執行出現了兩次的自動下線,然後看日誌並沒有報錯資訊。所以我們初步懷疑是linux自己把這個程序給殺掉了。我們剛開始使用下面的命令,並沒有發現有kill的日誌 dmesg egrep i b100 killed process 或者 egrep i killed process va...

C 多執行緒問題

多執行緒問題,一直是我的乙個噩夢,老是搞不清楚怎麼回事,真是很慚愧呀,所以今天特地向各位的大大求教。如下 c include www.h include include include include include include pthread cond t cond pthread mutex...

多執行緒問題C

1.過去寫的微控制器裸跑的程式,其實也屬於多執行緒的,用智慧型電表中的韌體做個比方。void main void 迴圈中,所列包括3個 執行緒 處理,執行緒1在執行完之後執行執行緒2,執行緒2執行完進入執行緒3.後面依次,此類我覺得也可稱之 執行緒 由於不必存在同時處理的問題,因此不存在爭搶同一共享...