所以如果一個線程鎖定一個互斥量然後啓動一個hrtimer。在定時器處理程序回調函數中,我可以解鎖該互斥鎖嗎?在Linux內核中,我可以在定時器處理程序中解鎖互斥鎖嗎?
我問這個,因爲我在mutex.h文件看到: 「只有所有者才能解鎖互斥體」 「任務可能無法與互斥退出舉辦」 「互斥體可能無法在硬件或軟件中斷使用上下文,如tasklets和定時器「
那麼是在中斷上下文中執行的定時器處理程序?在這種情況下,互斥體不能解鎖,因爲所有者不知道?所以也許我應該使用信號量?
感謝,
@Andy羅斯嗨,感謝您的reply.I在評論不會打字太多的話。我要做的是有點難以解釋。例如,我們在一個插座上有4個內核。核心0想要增加其頻率。爲此,首先需要增加插座電壓(電壓變化是插座電平),然後改變頻率。在更換過程中(通常更改電壓需要一些時間),其他內核也可能需要更改不應允許的插座電壓。因此核心0首先鎖定互斥鎖,然後發出電壓命令的更改,啓動計時器並立即返回以執行其他任務。當定時器到期時,它將檢查電壓變化是否已完成。如果是這樣,它將改變內核的頻率,然後解鎖互斥鎖,以允許其他內核改變插座的電壓。所以互斥量是套接字級別。 我想也許我可以使用睡眠。如果其他內核試圖在電壓改變結束之前改變電壓,他們將進行納秒睡眠()。
你想做什麼?這聽起來很可疑,就像你試圖使用互斥體來控制進程等待一樣。如果你沒有使用互斥鎖作爲鎖/解鎖範例,你可能做錯了什麼... –
@安迪羅斯你好,謝謝你的回覆。請檢查以下回答 –