【发布时间】:2012-09-23 22:46:40
【问题描述】:
因此,如果一个线程锁定了一个互斥体,然后启动了一个 hrtimer。在计时器处理程序回调函数中,我可以解锁该互斥锁吗?
我问这个是因为我在 mutex.h 文件中看到过: “只有所有者才能解锁互斥锁” “任务可能不会在持有互斥锁的情况下退出” “互斥锁不能用于硬件或软件中断上下文,例如小任务和计时器”
那么定时器处理程序是在中断上下文中执行的吗?在那种情况下,互斥锁无法解锁,因为所有者不知道?那么也许我应该使用信号量?
谢谢,
@Andy Ross 嗨,谢谢你的回复。我不能在评论中输入太多字。我要做什么有点难以解释。例如,我们在一个插槽上有 4 个内核。核心 0 想要增加它的频率。为此,首先需要提高插座电压(电压变化是插座电平)然后改变频率。在改变过程中(通常改变电压需要一些时间),其他核心可能也想改变插座的电压,这是不允许的。所以core 0首先锁定一个mutex,然后发出改变电压的命令,启动一个定时器并立即返回运行其他任务。当定时器到时,它会检查电压变化是否已经完成。如果是这样,它将改变核心的频率,然后解锁互斥锁以允许其他核心改变插座的电压。所以互斥锁是套接字级别的。 我想也许我可以使用睡眠。如果其他内核尝试在电压更改完成之前更改电压,它们将执行 nanosleep() 例如。
【问题讨论】:
-
你想做什么?这听起来很可疑,就像您正在尝试使用互斥锁来控制进程等待。如果您没有将互斥锁用于锁定/解锁范例,那么您可能做错了什么......
-
@Andy Ross 嗨,谢谢您的回复。检查以下答案
标签: linux linux-kernel mutex