2014-04-21 42 views
0
並行線程

///////// // //////////////////////*pthread_mutex_trylock?在Windows

pthread_mutex_t stop = PTHREAD_MUTEX_INITIALIZER; 
int a = 1; 

void* decrement(void* arg) 
{ 
    pthread_mutex_trylock(&stop); 
    if(a > 0) { a--; } 
    cout << "Esecuzione thread tid" << endl; 
    pthread_mutex_unlock(&stop); 
    pthread_exit(NULL); 
} 

int main() 
{ 
    pthread_t tid; 

    pthread_attr_t tattr; 
    pthread_attr_init(&tattr); 
    pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED); 

    pthread_create(&tid, &tattr, decrement, NULL); 

    pthread_mutex_lock(&stop); 
    if(a > 0) { a--; } 
    cout << "Esecuzione thread main" << endl; 

    cout << a << endl; 

    pthread_exit(NULL); 
    return 0; 
} 

爲什麼線程分離到主線程繼續執行,而不是使用EBUSY返回給調用者?

+2

您不在任何地方檢查任何錯誤代碼,那麼如何判斷它們是否被退回? –

回答

1

沒有什麼特定於Windows的問題。你實際上誤解了pthread_mutex_trylock()的工作原理。

pthread_mutex_trylock()函數應相當於pthread_mutex_lock(),不同之處在於,如果由互斥引用的互斥對象當前被鎖定(由任何線程,包括當前線程),該呼叫應立即返回。
​​
互斥量,因此無法獲取,因爲它已經被鎖定:
...
如果該pthread_mutex_trylock()功能將失效。

這不是decrement線程,但pthread_mutex_trylock()返回(可能返回)EBUSY(你沒有檢查...)

通過它也可以爲decrement線程finith其執行方式在main()線程中早於pthread_mutex_lock(&stop)。這完全不確定。