This is the mail archive of the
libc-help@sourceware.org
mailing list for the glibc project.
pthread_create()'s behavor?
- From: Hei Chan <structurechart at yahoo dot com>
- To: "libc-help at sourceware dot org" <libc-help at sourceware dot org>
- Date: Sun, 15 Apr 2012 22:56:56 -0700 (PDT)
- Subject: pthread_create()'s behavor?
- Reply-to: Hei Chan <structurechart at yahoo dot com>
Hi,
I am using pthread library on CentOS 5.5.
I have the following code:
class B {};
class A {
private:
?? std::map<long, B*> m_myMap;
public:
?? A::A() {
?????? m_myMap[0] = new B();
?????? pthread_t threadID;
?????? pthread_create(&threadID, NULL, start, NULL);
?? }
?? static void* start(void*) {
?????? // use m_myMap[0] here, will this new thread sees everything happens before it gets created (e.g. m_myMap[0] contains the valid value)?
?????? m_myMap.find(0);
?? }
}
Sometimes (~1% chance), I got a segfault at m_myMap.find(0).? Is it true that pthread_create() won't try to enforce the memory barrier to ensure all the previous writes to be globally visible?
Thanks in advance.
Cheers,
Hei