C中的pthread和子进程数据共享

bes*_*osu 4 c scope fork pthreads data-sharing

我的问题有些概念化,如何通过fork()调用或创建的线程创建父进程的数据与子进程共享pthread_create()

例如,全局变量是直接传递给子进程的,如果是,那么对子进程的变量进行修改会在父进程中对它进行效果吗?

我提前感谢部分和完整的答案,如果我错过任何现有的资源,对不起,我已经在谷歌上做了一些搜索但是找不到好的结果

再次感谢您的时间和答案

Rar*_*arr 5

fork()和pthread_create()的语义略有不同.

fork()将创建一个新进程,其中全局变量将在父进程和子进程之间分开.大多数操作系统实现都将使用写时复制语义,这意味着父进程和子进程都将为所有全局变量使用相同的物理内存页,直到其中一个进程尝试编辑物理内存,此时副本页面已经生成,因此现在每个进程都有自己的副本,并且看不到其他进程,因此进程是隔离的.

另一方面,pthread_create()在同一进程中创建一个新线程.新线程将与同一进程的其他正在运行的线程具有单独的堆栈空间,但是全局变量和堆空间在同一进程的所有线程之间共享.这就是为什么您经常需要一个互斥锁来协调对同一进程的多个线程之间的共享内存块的访问.

TL; DR版本:使用fork(),你看不到其他人的变化; 用pthread_create()你做的.