Re: Sequenced-Before for g++ 4.1.2?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ian,

If the compiler will issue all writes to globablly visible memory before pthread_create() is called, isn't it true that it doesn't matter whether pthread library would have a memory barrier during pthread_create?

I am running into an odd issue that I added a key-value pair to std::map<long, Foo*> (a member variable) in a constructor, and then called pthread_create() in the constructoras well, but when the new thread tried to look up one of the key-value pairs, I got a segfault inside std::map<long, Foo*>::find().  I could only think of when I tried to read the map, and the OS was trying to make the previous writes to the map visible to the new thread.  And such crash only happened 1% of the time.


Nowhere in my code changes the map except inside the constructor, and I printed out the key before I inserted it into the map.  When I ran gdb, I saw the key value and I did see the key in the log as well.


Cheers,
Hei



----- Original Message -----
From: Ian Lance Taylor <iant@xxxxxxxxxx>
To: Hei Chan <structurechart@xxxxxxxxx>
Cc: "gcc-help@xxxxxxxxxxx" <gcc-help@xxxxxxxxxxx>
Sent: Friday, April 13, 2012 10:46 PM
Subject: Re: Sequenced-Before for g++ 4.1.2?

Hei Chan <structurechart@xxxxxxxxx> writes:

> I am still on 4.1.2 (which defaults to use C98), and I wonder whether g++ 4.1.2 guarantees that everything happens before (e.g. write to a variable) will be reflected in another thread if:
> 1. there is no lock (e.g. pthread_mutex/spinlock) involving
> 2. the "another thread" is created (e.g. calling pthread_create) after the "write"

The relevant question for the compiler is whether it will issue all
writes to globally visible memory before calling pthread_create.  The
answer is: yes, it will.

The rest is up to your library.  I would expect that any pthread library
would have a memory barrier during pthread_create, in which case you
should be fine.

Ian




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux