2014-04-20 90 views
-1

为什么变量a不假定值0或-1而是0和1?线程 - 执行时间

pthread_mutex_t stop = PTHREAD_MUTEX_INITIALIZER; 
int a = 1; 

void* decrement(void* arg) 
{ 
    pthread_mutex_lock(&stop); 
    if(a > 0) { a--; } 
    pthread_mutex_unlock(&stop); 
    pthread_exit(NULL); 
} 

int main() 
{ 
    pthread_t tid, tid1; 
    pthread_attr_t tattr; 
    pthread_attr_init(&tattr); 
    pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED); 
    pthread_create(&tid, &tattr, decrement, NULL); 
    pthread_detach(tid); 
    pthread_create(&tid1, &tattr, decrement, NULL); 
    pthread_detach(tid1); 
    cout << a << endl; 
} 
+0

你为什么分离线程? (每次两次,重点?) –

+1

您在'main'的最后一行读到'a'是不受保护的,这是一个错误。 – Mat

+0

并行运行 – user3551234

回答

2

由于线:

if(a > 0) { a--; } 

一个不能等于-1,如果当它等于或小于0则不会减少......