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