private static object construction bug?

Mark Mitchell mark@codesourcery.com
Mon Aug 5 16:06:00 GMT 2002



--On Monday, August 05, 2002 03:50:12 PM -0700 Zack Weinberg 
<zack@codesourcery.com> wrote:

> On Mon, Aug 05, 2002 at 01:58:18PM -0700, Mark Mitchell wrote:
>
>>  if (!guard) {
>>    __cxa_guard_acquire (&guard); // I forget the exact name.
>>    // Construct variable.
>>    __cxa_guard_release (&guard):
>>  }
>
> This sequence has two different races.
>

Yes; I was overly simplistic.  You are of course correct.

> It is likely that the ABI standard does specify something like this,
> but I wanted to make sure people understood that thread-safe object
> construction is not as simple as you made it look.  (The guard
> variable can't be a simple integer, either; it needs to be a structure
> containing an integer and a mutex.)

Yes.  The ABI says that guard is 64 bits long, and that one of the
bytes is a boolean.  (Our current implementation just twiddles that
byte.)  The idea is that __cxa_guard_acquire twiddles the byte in
a thread-safe way.

Thanks for clarifying.

-- 
Mark Mitchell                mark@codesourcery.com
CodeSourcery, LLC            http://www.codesourcery.com



More information about the Gcc mailing list