假設我想在n個單獨事件發生後喚醒任務。將信號量初始化爲1-n和down()它是合法的,所以在每個事件發生後,我都會醒來()'d it?將一個linux內核信號量初始化爲負數是合法的嗎?
4
A
回答
5
我不這麼認爲。
(1)semephore.count被聲明爲unsigned int。見信號定義:
struct semaphore {
spinlock_t lock;
unsigned int count;
struct list_head wait_list;
};
(2)倒()函數將之前檢查計數值減少它,確保計數不爲負。
除非您實施一種機制,否則不能直接使用信號量來完成您的要求。
+0
謝謝。我正在查看一個較舊的內核,其中的計數是原子-t,但我認爲您仍然適合舊內核 – smoofra
1
計數是無符號的,所以當你認爲你將它設置爲負數時,它實際上是一個非常大的正數。所以不,你不能。
1
這不是一個好主意,因爲它沒有簽名。另外,只有在信號是正數時纔會激活信號量,因此如果將信號量初始化爲負數會產生大量信號量,則會導致信號量允許訪問您希望限制的內容。
相關問題
- 1. 信號量初始化
- 2. 正在初始化一個未初始化變量的變量是否合法?
- 3. Linux阻止信號到Python初始化
- 4. 信號初始化
- 5. 這是一個數組初始化嗎?
- 6. 初始化內核模塊變量
- 7. 使用sem_open初始化信號量
- 8. 信號量值大於初始化值
- 9. 更高一半的內核初始化
- 10. 初始化一個變量爲零是好習慣嗎?
- 11. 初始化方法是Ruby中的一種內置方法嗎?
- 12. 內核鏈表初始化
- 13. 信號無法初始化爲VHDL中的整數值
- 14. 誰初始化信號燈?
- 15. VHDL:信號初始化
- 16. 初始化時內存將分配給「未初始化的靜態變量」嗎?
- 17. 這是用兩個線程初始化信號量的正確方法
- 18. 在linux內核中,初始化的第一個進程在哪裏?
- 19. 在Linux內核初始化期間的問題
- 20. C中用於共享內存的信號量無法初始化
- 21. 初始化一個變量
- 22. 用數組或初始化初始化一個NSMutableArray初始化
- 23. 將變量從一個初始化器傳遞到另一個初始化器
- 24. 初始化一個將保存內部類的變量
- 25. 爲什麼信號量對象未初始化?
- 26. SMP系統上的內核初始化
- 27. 使用將該變量作爲參數的函數初始化一個變量
- 28. 我該如何初始化這個信號量
- 29. linux內核中的單處理器上的信號量
- 30. VHDL /如何初始化我的信號?
在你的情況下嘗試條件變量。 – Deqing