c++ - 线程可以在对内核的系统调用中被抢占吗?

标签 c++ c multithreading pthreads

我正在运行 2 个线程(暂时假设它们是 pthreads)。 Thread_1() 进行用户定义的 API 调用,最终在内核中完成一些工作。 Thread_2() 完全在用户空间中。

我的问题是:当 API 调用正在进行时,Thread_2() 能否通过抢占 Thread_1() 开始执行,控制权在内核中的某处?如果不是,为什么,如果我希望这种情况发生(出于任何原因),我必须做什么?

最佳答案

对内核的调用被认为是阻塞非阻塞。阻塞调用(例如等待从网络套接字读取数据)当然可以被抢占,您无需采取任何行动。其他线程将继续运行。非阻塞内核调用可以被认为是非常快的,实际上,您是否真的可以抢占它们并不重要。

通常,在编写多线程代码时,您会专注于这些线程如何相互交互,而将它们与内核的交互留给内核来管理。它旨在做得很好。

关于c++ - 线程可以在对内核的系统调用中被抢占吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892104/

相关文章:

c++ - 重载 == 运算符导致丢弃限定符错误

c - 如何将最大的数字推到数组的后面

c++ - 热衷于在 cygwin 上安装 value.h 头文件 (c/c++)

c++ - 加快 CSV 文件的处理速度

C++语言模板题

c++ - C++ 中的可扩展类型特征

c - 根据百分比从一种速度线性插值到另一种速度

multithreading - 线程停在AbstractFuture上的等待条件下

multithreading - 在多线程程序中嵌入多个 lua 实例

c++ - for循环中的随机数生成器每次都给出相同的数字