Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Nov 2010 14:19:42 +0100
From:      Jilles Tjoelker <jilles@stack.nl>
To:        David Xu <davidxu@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   Re: svn commit: r215071 - in user/davidxu/libthr: include lib/libc lib/libc/gen lib/libc/stdio lib/libthr lib/libthr/thread
Message-ID:  <20101112131941.GA57806@stack.nl>
In-Reply-To: <201011100127.oAA1Rmrh069656@svn.freebsd.org>
References:  <201011100127.oAA1Rmrh069656@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Nov 10, 2010 at 01:27:48AM +0000, David Xu wrote:
> Author: davidxu
> Date: Wed Nov 10 01:27:48 2010
> New Revision: 215071
> URL: http://svn.freebsd.org/changeset/base/215071

> Log:
>   Convert pthread_mutex_t and pthread_cond_t to structure based instead of
>   pointer type, this allows us to support process-shared.

Very nice.

Apart from supporting process-shared, this also helps avoid the "array
of synchronization objects" anti-pattern (false sharing). It is not so
bad for the old struct pthread_mutex which is 64 bytes on i386, but in
other cases one cache line may contain parts of multiple unrelated
synchronization objects.

In this regard, it would be better for stdio to allocate
  struct { FILE file; pthread_mutex_t lock; }
rather than separate FILEs and locks.

Like the sem_t change, this changes the ABI in a way symver can only
partially deal with (think plugins with pthread_mutex_t in struct in
public header file). However, I think the change should be made
regardless.

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101112131941.GA57806>