Multithreaded qsort(3)
Dan Nelson
dnelson at allantgroup.com
Sun Mar 18 20:44:51 UTC 2007
In the last episode (Mar 18), Giorgos Keramidas said:
> On 2007-03-17 23:43, Kip Macy <kip.macy at gmail.com> wrote:
> > Reminds me of how Solaris blindly uses vfork for implementing
> > system(3). It was very easy for a naive user (me) to call system
> > from a multi-threaded python application. I had numerous failures
> > that were impossible to track back to system(3).
>
> It seems like an 'obvious' optimization, though. vfork() will block
> the parent process until the child runs exec(), and the whole purpose
> of system is to exec() a shell and run an external command.
>
> Can you elaborate on the problems you were seeing? It sounds like
> something both interesting and educational :)
Btw - the Solaris 10 system manpage only mentions signal interactions
as the cause for MT-unsafeness:
"The system() function manipulates the signal handlers for SIGINT,
SIGQUIT, and SIGCHLD. It is therefore not safe to call system()
in a multithreaded process, since some other thread that
manipulates these signal handlers and a thread that concurrently
calls system() can interfere with each other in a destructive
manner. If, however, no such other thread is active, system() can
safely be called concurrently from multiple threads. See
popen(3C) for an alternative to system() that is thread-safe."
It looks like there were some vfork-related system() bugs in older
versions of Solaris, but they appear to have been fixed:
http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4332595
--
Dan Nelson
dnelson at allantgroup.com
More information about the freebsd-arch
mailing list