On Mon, Oct 08, 2012 at 12:17:08PM -0400, Eitan Adler wrote: > The only difference between -lpthread and -pthread that I could see is > that the latter also sets -D_REENTRANT. > However, I can't find any uses of _REENTRANT anywhere outside of a few > utilities that seem to define it manually.
> Testing with various manually written pthread programs resulted in > identical binaries, let alone identical results. > Is there an actual difference between -pthread and -lpthread or is > this just a historical artifact? In some cases, -pthread also affects the compiler's code generation. On some RISC architectures, compilers may try to avoid loads and stores of less than 32 bits. For example (untested): struct { int n; char a, b, c, d; } *p; p->a = p->b = p->c = 0; The compiler might load p->d and then store the 32 bits containing a, b, c and d at once. This causes a race condition if p->d is written concurrently. Because C99 does not specify threading, it allows these transformations. In C11, they are forbidden. Passing -pthread disables them as well. -- Jilles Tjoelker _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"