簡體   English   中英

具有增加的所有者線程優先級的同步原語

[英]A synchronization primitive with increased owner thread priority

我有一個程序,有時會發生突發事件,因此如果可能的話,線程會將 CPU 加載到 100% 以上,但實際上,它們為 CPU 而戰。 獲得同步原語所有權的線程獲得比應用程序的其他線程更高的優先級至關重要,這樣可以防止線程獲得所有權並被調度程序暫停的情況。 C++(最新草案)或 WinAPI 中是否有合適的同步原語,或者我是否必須在SetThreadPriority()調用中包裝互斥鎖代碼?

這實際上不是問題。 如果擁有同步原語的線程被調度程序暫停,那只是因為有足夠的准備運行線程來保持所有內核忙碌。 在這種情況下,沒有特別的理由關心哪個線程運行。

等待同步原語的線程尚未准備好運行。 因此,如果您有四個內核並且保存同步原語的線程沒有被阻塞,那只是因為有四個線程,都准備好運行,可以在不保存同步原語的情況下向前推進。 在這種情況下,運行這四個線程與運行保存同步原語的線程一樣好。

我強烈建議你不要亂搞線程優先級,除非你真的別無選擇。 一旦你開始搞亂線程優先級,上面的論點就會停止,因為你可能會遇到優先級反轉等問題。 但是如果你不搞亂線程優先級,那么你就不會遇到這類問題,調度程序將足夠聰明,可以在 99% 的時間里做正確的事情。 並且試圖弄亂優先級以讓它做正確的事情,持續 1% 的時間可能會適得其反。

您正在尋找的機制稱為優先 inheritance 協議 Pthreads 提供對這種配置的支持,其想法是,如果高優先級任務正在等待低優先級任務占用的資源,則低優先級任務將提升到該高優先級,直到它放棄資源。

搜索 Liu 和 Layland,他們在 70 年代初寫了大部分內容。 至於C++,恐怕離1973年的state還有幾個版本。

暫無
暫無

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

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