我一直在閱讀多線程和共享資源訪問權限,其中一個(對我來說)新的概念是互斥鎖。我似乎無法找到的是線程實際發生的情況,發現「關鍵部分」被鎖定。它說在很多地方線程被「阻塞」了,但這是什麼意思?它是否被暫停,並且當鎖被解除後它會恢復嗎?或者是否會在「運行循環」的下一次迭代中再次嘗試?互斥鎖:「阻塞」是什麼意思?
我問的原因是因爲我想讓系統提供的事件(鼠標,鍵盤等)(在主線程中交付)在運行循環中非常特定的部分處理我的輔助線程。因此,無論發生什麼事件,我都會在自己的數據結構中排隊。顯然,數據結構需要互斥鎖,因爲它正在被兩個線程修改。缺少的難題是:在主線程中的某個函數中傳遞事件時會發生什麼,我想排隊,但隊列被鎖定?主線程是否會被暫停,或者它是否會跳過鎖定的部分並超出範圍(失去事件)?
主運行循環不驅動應用程序。我在Mac OSX上使用CVDisplayLink,它有效地產生了一個單獨的(高優先級)線程,這將反過來驅動我的運行循環。據我所知,事件將在主線程上傳遞,所以同步似乎是按順序的。 – zmippie 2010-10-21 09:21:56