caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Oliver Bandel <oliver@first.in-berlin.de>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Threads & Fork
Date: Tue, 22 Nov 2005 21:56:46 +0100	[thread overview]
Message-ID: <20051122205646.GB594@first.in-berlin.de> (raw)
In-Reply-To: <200511221832.55487.A.S.Usov@kvi.nl>

On Tue, Nov 22, 2005 at 06:32:55PM +0100, Alexander S. Usov wrote:
> On Tuesday 22 November 2005 16:50, Oliver Bandel wrote:
> > On Tue, Nov 22, 2005 at 04:39:07PM +0100, Florian Weimer wrote:
> > > * Jonathan Bryant:
> > > > I'm confused as to why the attached code hangs.  My understanding of
> > > > Unix.fork () is that it completely clones the current process, which in
> > > > my understanding, clones the processes's threads as well.  Apparently,
> > > > though, that is not the case, because I can't join the thread in both
> > > > the parent and the child.
> > >
> > > I can't speak for the OCaml run-time, but POSIX fork only duplicates
> > > the current thread, so the new process is essentially single-threaded.
> >
> > I doubt that this is true.
> > Unix-fork() copies a complete process.
> > If the original has threads, the copy also have.
> > I don't think that POSIX handles this different to old Unix API.
> >
> > Unix-module should do the same as the C-call of fork(2).
> >
> > Threads are running inside a process, like any other
> > function. So all should be copied completely.
> >
> > But using POSIX-threads and Unix-API can yield to many problems,
> > for example POSIX threading signals and Unix-signals are clashing
> > together and the behaviour can be undefined...
> 
> [Option End]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. [THR] [Option Start]  Fork handlers 
> may be established by means of the pthread_atfork() function in order to 
> maintain application invariants across fork() calls. [Option End]
> 
> (c) SUS v3

OK, I looked into my literature...

    "Pthreads specifies that only the thread calling fork exists in the child."
                       (David R. Butenhof: Programming with POSIX-Threads, p. 197)

OK, so I was wrong with my doubting... ;-)

But... the other threads' states in the child are the same as in the
parent.... and other things are also very.... strange.
Mutexes and other things are living inb the child, but
threads that possibly would work with them don't exist...
...there is no cleanup done...
...well.. so better don't use it this way.
So Butenhof said the same as you found in SUS v3 .... 

Ciao,
   Oliver


  reply	other threads:[~2005-11-22 20:57 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-22 15:39 Jonathan Bryant
2005-11-22 15:03 ` [Caml-list] " Oliver Bandel
2005-11-22 15:39 ` Florian Weimer
2005-11-22 15:50   ` Oliver Bandel
2005-11-22 16:01     ` David Teller
2005-11-22 17:32     ` Alexander S. Usov
2005-11-22 20:56       ` Oliver Bandel [this message]
2005-11-23  3:34     ` Matthew Hannigan
2005-11-22 16:01 ` Christophe Raffalli
2005-11-22 20:46 ` Oliver Bandel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051122205646.GB594@first.in-berlin.de \
    --to=oliver@first.in-berlin.de \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).