簡體   English   中英

Swift隊列/並發和鎖定

[英]Swift Queues/Concurrency and Locking

我通常使用串行隊列作為鎖定機制,以確保一個資源可以被許多不同的線程訪問而不會出現問題。 但是,我看到了其他開發人員使用帶有或不帶有信號燈的並發隊列的情況(在Linux上使用帶信號燈的並發隊列看到了IBM / Swift)。

有什么優點/缺點嗎? 我相信僅使用串行隊列就可以正確地阻塞資源,而不會浪費信號量的時間。

另一方面,當CPU繁忙時會發生什么? 如果我沒記錯的話,串行隊列不一定要在相同的線程/相同的cpu上執行,對嗎?

那是我能想到的唯一解釋; 並發隊列將能夠在所有可用線程/ CPU上共享工作負載,從而確保通過信號量的線程安全訪問。 使用沒有信號量的並發隊列並不安全,對嗎?

帶有信號燈的並發隊列使您可以更詳細地了解哪些條件需要鎖定。 您可以使大多數功能並行執行,只有互斥的區域(關鍵區域)需要鎖定。

但是,這可以使用並發隊列來模擬,該並發隊列的關鍵區域被調度到串行隊列,以確保相互排斥。

我相信僅使用串行隊列就可以正確地阻塞資源,而不會浪費信號量的時間。

串行隊列還需要信號燈,因為必須同步對隊列的更改。 但是,它會把它塞在地毯下,並保護您免受與手動使用信號量有關的許多容易犯的錯誤。

使用沒有信號量的並發隊列並不安全,對嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM