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內核。
這可能是一個非常愚蠢的問題。 – 2012-04-25 19:11:04
如果您使用Linux內核,爲什麼不能使用現有的線程庫? – 2012-04-25 19:12:50
我需要將一個非標準的libc實現與一個標準的pthread實現結合起來。而且我找不到任何可以在ARM上運行的獨立pthreads實現。 – 2012-04-25 19:17:45