3
我想在用信號量定義最大大小時創建隊列。爲什麼我需要使用帶信號量的鎖
Enque將增加項目和deque將刪除項目
public void Enque(T item)
{
semaphore.WaitOne();
privateQueue.Enqueue(item);
在谷歌上搜索類似的情況,我發現,有時候鎖用於 這樣
semaphore.WaitOne();
lock(lock)
privateQueue.Enqueue(item);
爲什麼我們需要加一把鎖信號? 謝謝
編寫線程安全代碼是* hard *。關於這個主題的一些精彩的書籍:「Windows上的併發編程」,「實踐中的Java併發」(與C#開發人員驚人地相關,提供您知道如何匹配API) –
Semaphore的初始化是什麼?如果它是「新的信號量(0,1)」,那麼你可能不需要使用鎖,因爲使用這樣的信號量將只允許一個線程訪問資源。 –