我想知道为什么以下代码会产生意外输出:a
可以获得110 ......!
pthread_t th[nbT];
void * func(void *d)
{
while(a<100)
{
pthread_mutex_lock(&l);
cout <<a <<" in thread "<<pthread_self()<<"\n";
a+=1;
pthread_mutex_unlock(&l);
}
return NULL;
}
int main(int argc, const char* argv[])
{
for(int i=0;i<nbT;i++)
pthread_create(&(th[i]), NULL, func, NULL);
for(int i=0;i<nbT;i++)
pthread_join(th[i],NULL);
}
答案 0 :(得分:2)
问题是你在检查条件后得到了锁(互斥锁),因此一旦你获得锁定,你就不知道它是否仍然是真的。你应该做一个简单的仔细检查:
while(a<100)
{
pthread_mutex_lock(&l);
cout <<a <<" in thread "<<pthread_self()<<"\n";
if (a<100) a+=1; // <== Added condition here!
pthread_mutex_unlock(&l);
}