On Wed, Mar 24, 2010 at 03:09:19PM -0700, Michael Graff wrote:
> The comment that pthread_* functions cannot safely be used in the forked
> child is not QUITE what I understand to be what POSIX has in mind.

To quote the SUSv3:

***cut**
A process shall be created with a single thread. If a multi-threaded
process calls fork(), the new process shall contain a replica of the
calling thread and its entire address space, possibly including the
states of mutexes and other resources. Consequently, to avoid errors,
the child process may only execute async-signal-safe operations until
such time as one of the exec functions is called.
***cut***

The RATIONALE has a list of many of the issues here.

> Consider the method to become a daemon, you fork() then let the child
> continue.  Surely we're not saying you cannot use pthread_create() there...

You are confusing something here. The constraints apply to
multi-threaded programs. Most daemons do the double-fork dance early and
start threads afterwards.

Joerg

Reply via email to