第7章 進階的同步 觀念與實務
在臨界區域中發生中斷的後果
共用變數(shared variable)的 解決辦法
共用變數(shared variable)的改良解決辦法
測試(test)與設定(set)
多個共用變數與中斷
多個共用變數與中斷
同時執行的處理元(concurrent processes)
同步問題解法要滿足那些條件才算完備呢? 互斥 有限關聯性 有限等待 有限容量防止饑餓(starvation)
用號誌(semaphore)解決基本的臨界區域同步問題
用號誌(semaphore)解決基本的合作型態的同步問題
運用測試並設定(test-and-set)的指令
用測試並設定的指令支援記數號誌(counting semaphore)的演算法
多處理器(multiprocessors)的情況 號誌在實作上常以取消中斷(interrupts)的方式來達成,但是對於多處理器共用記憶體的電腦來說,取消一個CPU的中斷,並沒有影響其他CPUs中斷的存在 所以多處理器共用記憶體的電腦會採用其他的技術來實作號誌
巢狀號誌(nesting semaphore)
同時號誌(simultaneous semaphore)的用法
監督器(monitor) 假如同步的問題很複雜,則純粹使用號誌的話,可能很難設計,監督器可以運用抽象化來簡化複雜的同步問題。 就解決問題的能力來說,號誌與監督器是一樣的,只是在運用上監督器的表示方式好用多了。 監督器的抽象化方法以抽象資料型式(abstract data types)為基礎,在監督器中,任何時間只有一個處理元能執行一個程序,也就是說 : only one process may be executing a procedure at any given time
運用臨界區域的觀念來寫監督器
IPC的機制
從執行環境的觀點來看執行緒 使用者執行緒(user threads) 常駐執行緒(daemon threads)
Java程式使用執行緒的兩種方法 實作Runnable介面 繼承Thread類別
執行緒裡頭的組成 執行緒的識別碼(thread ID)。 程式計數器(program counter)。 暫存器組(register set)。 堆疊(stack)。
多執行緒的程式設計優點 資源的共用 提升系統回應的效率 整體效能的提升
Java執行緒的狀態變化