問題現象
多線程如果使用pthread來實現tsd,在pthread_key_delete的時候卡死。
原因
pthread_key_delete內部代碼有錯,lock一次後多次unlock,導致卡住。
...
ptw32_mcs_lock_acquire (&(key->keyLock), &keyLock);
while{
...
// 以下這行不對:
ptw32_mcs_lock_release(&keyLock);
}
...
解決辦法
應該改成這樣:
...
ptw32_mcs_lock_acquire (&(key->keyLock), &keyLock);
while{
...
}
ptw32_mcs_lock_release(&keyLock);
...
本文結束。