Thank you for your reply.

I think from the following display of  lwps command of dbx that when a 
nonthreaded program,
which is thread-unsafe and linked with libpthread.so, calls  my shared library, 
four more threads
are created, and then main thread plus the four threads run at the same time 
because my shared
library is compiled with the -D_POSIX_C_SOURCE flag and linked with 
libpthread.so.
Do four threads except main thread cause problems for thread-unsafe caller 
program?

Enokida

Sent: Wednesday, February 21, 2007 3:19 AM
Subject: Re: [osol-code] Any problems with providing only shared librarys 
linked with libpthread.so


Enokida wrote:
My developing function consists of shared libraries that is thread safe.
This shared library can be called by both nonthreaded programs and multithread programs. I don't want to provide two shared libraries for nonthreaded programs and for multithread programs. For this reason, I want to provide only shared libraries compiled with the -D_POSIX_C_SOURCE flag and linked with libpthread.so for multithread programs.
However, there are the following descriptions on Solaris' Multithreaded 
Programming Guide.

Do not link a nonthreaded program with -lthread or -lpthread. Doing so establishes multithreading mechanisms at link time that are initiated at runtime. These slow down a single-threaded application, waste system resources, and produce misleading results when you debug your code.

When a nonthreaded program runs on before Solaris 9, four more threads run as 
follows.
(dbx) lwps
*>[EMAIL PROTECTED] breakpoint       in main()
  [EMAIL PROTECTED] running          in _signotifywait()
  [EMAIL PROTECTED] running          in ___lwp_mutex_lock()
  [EMAIL PROTECTED] running          in __lwp_sema_wait()
o [EMAIL PROTECTED] syscall return 159 in _lwp_s

What problems do I have by providing only shared libraries compiled with the -D_POSIX_C_SOURCE flag and linked with libpthread.so for multithread programs?


You don't need to link with any thread library.  In previous
releases of Solaris, no-op versions of the thread routines were
provided in libc so that applications that were not threaded could
use mt-safe libraries; the mutex calls, etc, were no-ops.  In Solaris
10, lib*thread was merged with libc and the need for such subterfuge
was eliminated.  Today, a call to *mutex_lock generates a simple store
if the application is multi-threaded and a atomic op if more than
one thread has existed in the program.

- Bart



--
Bart Smaalders Solaris Kernel Performance
[EMAIL PROTECTED] http://blogs.sun.com/barts



_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to