2012-04-25 195 views
0

我試圖在我的標準庫中實現互斥鎖,但我沒有得到任何與他們。我知道嘗試實現你不一定理解的東西是一個壞主意,但是我必須這樣做,因爲編譯現有的線程庫(例如uClibc)對於這個平臺是不可能的。 對於互斥體有沒有「像我一樣向我解釋5」的東西?或者有沒有「簡單易用」的實現?到目前爲止,我所見過的所有pthread實現都不可能遵循。實現互斥鎖?

我的鎖定功能的實現如下。我很確定它有什麼嚴重的問題,因爲我不知道我在做什麼。

int pthread_mutex_lock(pthread_mutex_t *pmutex) 
{ 
    OSMutex* mutex = GetOSMutex(pmutex); 

    /* Decrement the mutex counter */ 
    OSAtomicDecrement32(&(mutex->count)); 
    if (mutex->count < -1) { 
     /* 
      Contended, wait for the mutex to be released. 
     */ 
     lnkLog("mutex %p already held (n=%d), waiting for stuff to change", mutex, mutex->count); 

     futex$LINUX(&(mutex->data), 
        FUTEX_WAIT, 
        MUTEX_MAGIC, 
        NULL, 
        NULL, 
        0); 

     lnkLog("mutex %p was released", mutex); 

     return 0; 
    } 
    else { 
     /* 
      Not contended. Acquire the mutex. 
     */ 
     lnkLog("locking %p", mutex); 

     mutex->data = MUTEX_MAGIC; 
     return 0; 
    } 
} 

P.S.如果你想知道futexes,我正在使用Linux內核。

+0

這可能是一個非常愚蠢的問題。 – 2012-04-25 19:11:04

+0

如果您使用Linux內核,爲什麼不能使用現有的線程庫? – 2012-04-25 19:12:50

+0

我需要將一個非標準的libc實現與一個標準的pthread實現結合起來。而且我找不到任何可以在ARM上運行的獨立pthreads實現。 – 2012-04-25 19:17:45

回答