在Windows上根据给定的优先级获取互斥锁

时间:2019-04-02 13:01:40

标签: windows ipc

我有几个需要通信的进程,并且我希望只能让一个人同时与另一个人通话,例如,如果我有进程A,B,C,D。如果B要发送向A发送消息,C甚至向D都无法发送消息。

我已经有了必要的通信管道,并且我正在WinAPI中寻找一个对象来实现排他性行为。

我还需要设置一个优先级,因此,假设C正在向D发送一条消息,而A和B都希望进行传输,那么当C完成后,我需要确保A总是优先。 / p>

我知道,这听起来像是会导致饥饿的情况,实际上会这样,但我正在尝试模拟遭受饥饿的真实设置(CANbus)。

任何想法我可以使用哪种对象?

1 个答案:

答案 0 :(得分:-1)

Windows与所有其他现代OS一样,将根据优先级安排线程。如果您具有不同优先级的线程,并且它们都在等待相同的互斥量信号量,则当下一个互斥量可用时,将运行优先级最高的线程。

因此,您应该能够设置线程优先级,以使A高于B,并拥有一个在通信之前全部获取的互斥量信号量,并在完成后释放它们。因此,当C完成与D的通信时,它将释放互斥对象,并且Windows将在B的两个就绪线程(A和B)中排定A。由于A将使用信号量,因此B直到A完成后才准备就绪并发布了互斥量。