This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

pthread_create()'s behavor?


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]