我有两个线程共享一个关键部分。线程 A 永久保持对临界区的锁定,但每秒运行大约 50 次以下代码,以使线程 B 有机会介入:
LeaveCriticalSection(sec);
EnterCriticalSection(sec);
然而,使用这段代码,线程 B 似乎永远没有机会获得临界区。相反,线程 B 中对 EnterCriticalSection(sec) 的调用将永远阻塞该线程,尽管线程 A 每秒解锁临界区 50 次。
我知道线程 A 中 50hz 计时器中对 LeaveCriticalSection() 和 EnterCriticalSection() 的调用之间的间隔尽可能短,但我希望 LeaveCriticalSection() 调用能够让其他线程在关键部分等待在继续执行之前。
LeaveCriticalSection() 不应该像这样工作吗?如果是这样,有没有办法在释放临界区锁后显式让步给其他线程?POSIX 有类似 sched_yield() 的东西,但我认为在 POSIX 上什至没有必要,因为 pthread_mutex_unlock() 会给其他线程一个自动介入的机会。
但它似乎在 Windows 上不起作用(或者我的代码有问题)。任何人都可以对此有所了解吗?
谢谢!