0

我想知道为什么下面的代码会给出意外的输出:acan get 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);
 }
4

1 回答 1

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);
}  
于 2013-06-21T18:36:36.990 回答