【发布时间】:2018-12-29 16:19:57
【问题描述】:
听说像java这样的编程语言有多线程的概念。我在研究c语言的fork过程时,我想它是不是多线程的一个例子。
【问题讨论】:
-
你为什么删除你的most recent question(以及我的回答)?
标签: c multithreading fork posix
听说像java这样的编程语言有多线程的概念。我在研究c语言的fork过程时,我想它是不是多线程的一个例子。
【问题讨论】:
标签: c multithreading fork posix
不,不是。 C 甚至不知道fork(),但我假设您说的是POSIX 函数fork()。这将创建一个新进程,该进程与父进程完全隔离(除了一些例外,例如它可以继承打开的文件描述符)。
对于 C 中的线程,请查看 C11 中的 thread functions。不幸的是,对这些的支持不是很广泛,但也有 POSIX 线程接口pthreads。
【讨论】:
fork 可用于模拟线程(这无疑是一种将并行性引入计算的方法),但与父进程共享的资源要少得多。在许多系统上,可以通过在分叉之前创建MAP_SHARED 映射来共享部分地址空间,但除此之外,两个进程是分开的。甚至文件描述符也只是继承——如果您关闭它们或打开新的,其他进程不会受此影响。
【讨论】: