This is the mail archive of the 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]

RE: pthread_create()'s behavor?


In my experience, when you start dealing with pthreads "indeterminate" is the best description of events.  If you have some items that must exist before calling pthread_create or if you are creating multiple threads and they need to be created in a specific order, you need to be doing the checks yourself.  Also, there is always the possibility that the call to new failed to allocate memory and your map list may be empty.

I'd suggest validating that your map is not empty with a call to m_myMap.empty() before you try to perform any action on the map.


-----Original Message-----
From: [] On Behalf Of Hei Chan
Sent: Monday, April 16, 2012 1:57 AM
Subject: pthread_create()'s behavor?


I am using pthread library on CentOS 5.5.

I have the following code:

class B {};

class A {
?? std::map<long, B*> m_myMap;
?? 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.


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