我们在fork()和CreateThread之间有什么关系吗?CreateThread内部有没有调用fork()的东西?
发布于 2009-03-06 14:38:25
在NT中,基本工作单元称为线程(即NT调度线程,而不是进程)。用户线程在进程的上下文中运行。当您调用CreateThread时,您请求NT内核在您的进程上下文中分配一个工作单元(您也有一些纤程,它们基本上是您可以自己调度的线程,但这超出了您的问题的主题)。
当您调用CreateThread时,您为函数提供了一个入口点,该入口点将在函数被调用后运行。代码必须在进程的虚拟空间内,并且页面必须具有执行权限。简单地说,你给出了一个函数指针。;)
fork()是一个UNIX函数,它请求内核创建正在运行的进程的副本。父进程获得子进程的pid,子进程获得0(这样您就知道自己是谁了)。
如果你想在Windows中创建一个进程,你可以调用CreateProcess函数,但是它的行为不像fork()。原因是大多数情况下,您将创建线程,而不是进程。
正如您所看到的,CreateThread和fork之间没有关系。
发布于 2009-03-06 14:32:17
fork()只存在于Unix系统上,它会创建一个状态与调用方相同的新进程。CreateThread()在同一进程中创建一个新线程。
发布于 2009-03-06 14:40:25
Windows和Unix进程模型从根本上是完全不同的,因此无法直接将API从一个映射到另一个之上。
fork()将当前进程克隆为两个进程。在父进程中,fork()返回pid,在子进程中返回0。这通常是这样使用的:
int pid;
if (pid = fork()) {
// this code is executed in the parent
} else {
// this code is executed in the child
}fork是一个模拟层,用于在Windows上构建和运行Unix应用程序,它使用CreateProcess()模拟Cygwin ()的行为。
https://stackoverflow.com/questions/619019
复制相似问题