对于我的关键部分代码,如何在短时间内关闭在OS中切换线程的中断?

Ale*_*lex 3 c c++ winapi multithreading posix

众所周知,如果执行线程大于处理器核心数,则线程在某些时隙(量子)之间在它们之间切换.这适用于Win/*nix.但是,为线程切换实现了什么机制,它是在特定时隙启动的硬件中断,不是吗?

这个中断(IRQ)是多少,我可以更改/设置此时间的值(时隙),以及如何在短时间内关闭此中断,获得对性能(实时)部分代码的关键性(通过使用WINAPI/Posix)?

Jam*_*nze 6

您无法关闭OS的定时器中断; 它们在操作系统本身内进行管理,并且是正确运行所必需的.在大多数Unix下,您可以使用sched_setscheduler 和/或pthread_setscheduler设置调度策略 SCHED_FIFO,和sched_setparam/ pthread_setschedprio来设置优先级; 除非它具有更高的优先级,否则您将保证不会被任何东西打断.

在Linux下,至少(以及我曾经使用的其他Unix下),也可以将页面锁定到实际内存中,这样就不会出现页面错误(这会导致你等待磁盘)访问).Linux中的功能是mlock.

请注意,您可能需要特殊权限才能更改全局调度程序或使用mlock.