Re: about mutex of multithreaded program
On Apr 23, 1:25 pm, "lfeiman...@gmail.com" <lfeiman...@gmail.com>
wrote:
I have a class
class A
{
public:
DoSomething() {}
};
a vector of class A
typedef vector<A *> vectorA
typedef vectorA::iterator AIT;
now,there are n(n > 100) elements in vectorA,a thread doing follow
AIT it;
vectorA va;
for(it = va.begin();it != va.end();it++)
{
A * tmpa = *it;
tmpa->DoSomething();
}
,and another thread delete some elements from vectorA,and there no
mutex between two threads,for need of speed
and i'm wandering what will happen to the first thread,will it
coredump????
if it will ,what should i do to avoid this(coredump)
thanks advance to all that read this topic
--
[ Seehttp://www.gotw.ca/resources/clcm.htmfor info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
If you are deleting a container in vectorA, then it is wrong
regardless
of mutex issues, since your iterator will be invalidated. If you are
deleting the object being
pointed too, you will have all sorts of race conditions and will never
really know if
tmpA is pointing to a valid object or not, so a coredump, or just
about anything else can happen.
Even if you zero the pointer when deleting, and check for zero in your
loop, there will still
be race conditions, particularly on dual processor machines because or
cache coherency issues.
You need to use a critical section or mutex, and check for deletion
inside that critical section.
And use a profiling tool to find out where your real need for speed
is.
Ken Krovchuck
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]