線程的同步與互斥

什麼是臨界資源?
多個進程不能同時使用的資源叫做臨界資源。

什麼是臨界區?
每個線程訪問臨界資源的那段代碼稱作臨界區

操作系統在引入線程的併發性了以後,隨即帶來的就是資源共享和競爭的問題(因爲線程共享進程所擁有的所有資源)。
舉個例子,比如說,現在有兩個線程(線程A和線程B),他們都需要用到打印機,如果這個打印機的資源不加以限制,那麼在線程A打印還沒有結束的時候線程B就搶佔了資源打印線程B所要打印的內容。那麼輸出來線程A線程B打印出來的信息都是交錯的。
這裏寫圖片描述
由此可見,對臨界資源的限制顯得尤爲的重要
這裏寫圖片描述
這樣的情況纔是安全的,要麼不打印,要麼打印完。

所以,線程的同步與互斥機制是相當重要的。
什麼是同步,什麼是互斥?
線程當中爲了共享資源而不出現差錯,都有相互制約的關係
(1)間接相互制約。一個系統中的資源必定是多個線程所共享的,所謂的間接相互制約就是這個資源我佔有的時候,其他的線程不能夠獲取到這個資源,必須等待資源釋放後,才能夠去競爭獲取。
(2)直接相互制約。線程之間有時也是相互合作的,比如說線程A處理的數據提供給線程B,線程B有了線程A提供的數據才能工作,如果線程A還沒有執行結束不能返回處理結果,那麼線程B就會一直等待線程A結束,一直處於阻塞狀態。
以上說的間接相互制約,可以稱爲是互斥。而直接相互制約可以稱爲是同步。對於互斥,還可以這樣理解,線程A和線程B互斥的訪問某一個資源的時候他們之間會產生一個順序的問題—–要麼線程A等待線程B操作完畢,要麼線程B等待線程A操作完畢,這其實就是線程同步的問題。所以說,同步包括互斥,互斥也是一種特殊的同步。

發佈了186 篇原創文章 · 獲贊 27 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章