我正在运行 2 个线程(暂时假设它们是 pthreads)。 Thread_1() 进行用户定义的 API 调用,最终在内核中完成一些工作。 Thread_2() 完全在用户空间中。
我的问题是:当 API 调用正在进行时,Thread_2() 能否通过抢占 Thread_1() 开始执行,控制权在内核中的某处?如果不是,为什么,如果我希望这种情况发生(出于任何原因),我必须做什么?
最佳答案
对内核的调用被认为是阻塞 或非阻塞。阻塞调用(例如等待从网络套接字读取数据)当然可以被抢占,您无需采取任何行动。其他线程将继续运行。非阻塞内核调用可以被认为是非常快的,实际上,您是否真的可以抢占它们并不重要。
通常,在编写多线程代码时,您会专注于这些线程如何相互交互,而将它们与内核的交互留给内核来管理。它旨在做得很好。
关于c++ - 线程可以在对内核的系统调用中被抢占吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892104/