執行緒同步 17:本地存儲
作為本系列完結的最後一期,本篇要來介紹一種性質特殊的變數:執行緒本地變數。
作為本系列完結的最後一期,本篇要來介紹一種性質特殊的變數:執行緒本地變數。
多個執行緒之間有的跑得快而有的跑得慢。 本來這件事情可能也不是什麼問題,但是有的時候會遇到不同執行緒的工作之間存在依賴關聯性, 這時該怎麼辦呢? 本篇就要來介紹一個相當簡單的執行緒同步工具:同步屏障。
本篇要來介紹與探討一個在網路程式設計中相當常見的函式:select()。
前篇使用信號量來作為執行緒休眠喚醒的手段,相比於直接的輪詢或手動操作中斷信號來說已經簡單高效許多, 然而在使用上還是存在一些些複雜棘手之難處。 那麼本篇就來看看另一個可能更加方便的工具:條件變量。
前篇介紹了使用信號來通知睡眠甦醒的操作方式, 但以實際應用來說,直接這樣操作是過於低階原始而缺乏足夠的實用價值。 那麼本篇就來介紹一個能夠適合前篇那樣的應用場景的實用同步工具:信號量。
我們知道在呼叫休眠函式時,程式實際休眠的時間可能會比你所要求的時間還要久; 但是你知道嗎,有的時候實際休眠的時間會比所要求的還要短,甚至有可能短很多! 這是怎麼回事呢?本篇就讓我們來看看有關信號,或者有時被稱為軟體中斷的內容。
執行緒寫了那麼多期,對於一個其實相當重要的東西經常總是一筆帶過,那就是休眠。 對於許多自學出家的程式員來說,休眠可能不過就是呼叫一個函式去休息一段時間而已, 然而實際上休眠的背後藏著許多眉角的呢! 對休眠這件事裡裡外外多加了解一番融會貫通,將有助於我們能站在更高的位置掌握多緒程式的運作效能。
在日常程式設計中,許多的程式呼叫都會暫停並等待,但如果我們想要更多的使用彈性, 例如可以中途做些別的事情、或者想要中途可以取消不等了、或者想要顯示工作的進度等等的話, 我們還可以怎麼辦呢? 那麼本次就來介紹一個非常簡單也非常常見的設計方法:輪詢。
這次要介紹的是死鎖。 聽到這名字,會不會讓人以為又是具有某種特殊性質的執行緒鎖? 不,死鎖並不是一種執行緒鎖,而是一種我們並不樂見的情況……
本篇再來介紹另一個互斥鎖的變體,是在特定應用場景下能夠改善鎖定效率的執行緒鎖: 讀寫鎖(Readers-Writer Lock)。