【发布时间】:2021-06-12 01:18:10
【问题描述】:
在多线程应用程序中,如果一个线程调用 fork(),它将只复制该线程的状态。所以创建的子进程将是一个单线程进程。如果某个其他线程持有调用 fork() 的线程所需的锁,则该锁将永远不会在子进程中释放。这是个问题。 为了解决这个问题,我们可以通过两种方式修改 fork()。要么我们可以复制所有线程,而不是只复制一个。或者我们可以确保(其他)非复制线程持有的任何锁都将被释放。那么在这两种情况下,修改后的 fork() 系统调用是什么。这两个哪个更好,或者哪个选项的优点和缺点是什么?
【问题讨论】:
-
不要。 pthreads 工作组把自己逼到了一个角落,挖了一个逃生口,把他们糟糕的设计 () 的所有固有复杂性作为要求强加给用户。即使是像
system()这样的无害电话也会被此网络捕获。 () 设计,因为除了标准化作为共同元素的协议之外,ieee-pthreads 小组还着手设计全新的东西,并在其上加盖标准。只有在接缝处不太用力时才有效;是的,我是工作组的一员。
标签: multithreading operating-system locking fork