windows - 创建线程与 fork()

标签 windows multithreading unix process

fork() 和 CreateThread 之间有什么关系吗?有没有什么 CreateThread 内部调用 fork()?

最佳答案

在 NT 中,基本的工作单元称为线程(即 NT 调度线程,而不是进程。)。用户线程在进程的上下文中运行。当您调用 CreateThread 时,您请求 NT 内核在您的进程上下文中分配一个工作单元(您也有纤维,这些纤维基本上是您可以自己安排的线程,但这超出了您的问题的主题)。

当您调用 CreateThread 时,您为该函数提供了一个入口点,该入口点将在该函数被调用后运行。代码必须在进程的虚拟空间内,页面必须有执行权限。简单地说,你给了一个函数指针。 ;)

fork() 是一个 UNIX 函数,它请求内核创建正在运行的进程的副本。父进程获取子进程的pid,子进程获取0(这样你就知道你是谁了)。

如果你想在 Windows 中创建一个进程,你可以调用 CreateProcess 函数,但它的行为不像 fork()。原因是大多数时候您将创建线程,而不是进程。

如你所见,CreateThread和fork之间没有任何关系。

关于windows - 创建线程与 fork(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619019/

相关文章:

c++ - 第三种加载动态链接库的方式?别针

windows - 如何检查 Microsoft 补丁的适用性

javascript - angularjs - Grunt 服务给出 "spawn cmd ENOENT"错误

java - 如何处理不停止线程的行为不当的库

c++ - Unix 函数 gmtime_r 的 Windows 等价物是什么?

python - 使用 print() 太多会导致它失败吗?

C# 控制台线程

java - 是否有此排队系统的模式以及 Java 代码示例?

bash - 为什么在创建新的 "screen" session 时我的 .bash_profile 会中断?

python - 如何在没有 sudo 的情况下在 travis 中安装 python 包?