在Linux中,使用POSIX线程,可以提示调度程序安排特定线程。实际上,情况是我有一个进程,它是另一个进程的副本。对于确定性执行,跟随者进程需要以与领导者进程相同的顺序获取锁。
例如,假设在领导者进程中,互斥锁a被第一个线程2锁定,然后是3和4.锁定者必须以相同的顺序执行。因此,如果在追随者中,线程3首先遇到互斥锁a,我希望线程3对调度程序说,好吧我放弃了我的时间片,请安排线程2。我知道这可以通过修改调度程序来实现,但我不希望这样,我希望能够从用户空间程序中控制它。
答案 0 :(得分:0)
在任何系统,无论是Linux还是Windows POSIX,如果你不得不提出这类问题,那么恐怕你的应用程序正在走向一个黑暗的地方:(
即使线程3屈服,比如睡眠(0),中断之后可能只是重新安排线程3,抢占线程2,或者操作系统可能会在另一个免费核心上直接运行线程3可以先进入互斥锁。
您必须使您的应用程序正常运行(可能不是最佳),与OS调度/调度算法无关。即使您的设计在测试盒上工作,您最终还是必须在每个操作系统/硬件组合上测试您的系统,以确保它仍能正常工作而不会死锁或执行不正确。
摆弄调度算法,线程优先级等应该只是为了提高应用程序的性能,而不是试图让它正常工作或阻止它锁定!
RGDS, 马丁