Browse thread
Threads & Fork
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Alexander S. Usov <A.S.Usov@k...> |
| Subject: | Re: [Caml-list] Threads & Fork |
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 -- Best regards, Alexander.