我正在開發用戶級線程庫作爲項目的一部分。我想出了一個實現互斥鎖的方法。在繼續之前,我希望看到你的意見。基本上,我需要實現僅有3職能在我的圖書館在用戶級線程庫中實現互斥體
調用mutex_init,的mutex_lock和mutex_unlock
我想我爲mutex_t結構看起來像
typedef struct
{
int available; //indicates whether the mutex is locked or unlocked
queue listofwaitingthreads;
gtthread_t owningthread;
}mutex_t;
在我的mutex_lock功能,我會首先檢查如果互斥量在while循環中可用。如果不是的話,我會讓下一個線程執行的處理器。
在我mutex_unlock功能,我將檢查所有者線程是當前線程。如果是,我就可以設置爲0。
這是去了解它的方式嗎?另外,死鎖呢?我是否應該照顧用戶級庫中的這些條件,還是應該讓應用程序員正確編寫代碼?
如果沒有其他線程準備好運行,那麼yielding是一個no操作,所以你會有一個繁忙的循環。您是否正在尋找一個沒有互斥鎖的平臺? –
難道你不需要另一個互斥鎖來鎖定正在被操作的等待線程列表嗎? – Dipstick