多线程编程指南

Fork-all 模型

Solaris forkall(2) 函数可以复制地址空间以及子进程中的所有线程。地址空间复制非常有用,例如,在子进程永远不调用 exec(2) 但会使用其父地址空间的副本时。

当进程中的某个线程调用 Solaris forkall(2) 时,在可中断的系统调用中阻塞的线程将返回 EINTR

请注意,不要创建同时由父进程和子进程持有的锁定。通过调用包含 MAP_SHARED 标志的 mmap() 在共享内存中分配锁定时,会出现父进程和子进程同时持有锁定的情况。如果使用 Fork-One 模型,则不会出现此问题。