多執行緒程式設計相關理論

fchy822發表於2024-04-01

Happens-Before原則:如果操作A Happens-Before操作B,那麼操作A的結果對操作B是可見的,並且操作A在操作B之前執行。這確保了當一個執行緒修改了某個變數的值,其他執行緒能夠看到這個修改後的值,從而避免了資料不一致的問題。Happens-Before的關鍵規則:

  1. 程式次序規則:在一個執行緒內,按照控制流順序,書寫在前面的操作先行發生於書寫在後面的操作。
  2. 管程鎖定規則:一個unlock操作先行發生於後面對同一個鎖的lock操作。這確保了鎖的釋放對於獲取鎖的執行緒是可見的。
  3. volatile變數規則:確保volatile變數的修改對其他執行緒是立即可見的。
  4. 執行緒啟動規則:啟動執行緒的操作先行發生於執行緒中的任何操作。
  5. 執行緒終止規則:執行緒中的所有操作都先行發生於執行緒的終止,執行緒終止操作(包括正常的執行結束或者丟擲未捕獲的異常)對任何執行緒都是可見的。

多執行緒程式設計的三大特性

1)原子性(Atomicity)

原子性是指一個或多個操作作為一個整體來執行,中途不會被其他執行緒打斷。在多執行緒環境中,原子性確保一個操作要麼完全執行,要麼完全不執行,不會出現只執行一部分的情況。這有助於避免執行緒間的資料競爭和不一致狀態。

2)可見性(Visibility)

可見性是指當一個執行緒修改共享變數的值後,其他執行緒能夠立即看到這個修改。由於多執行緒環境中的快取和記憶體模型,一個執行緒對共享變數的修改可能不會立即對其他執行緒可見。可見性確保執行緒之間的共享資料始終保持一致,從而防止資料不一致和執行緒安全問題。

3)有序性(Ordering)

有序性是指多執行緒環境下,程式執行的順序性得到保證。處理器和編譯器可能會對指令進行重排序以提高效能,但這種重排序可能導致多執行緒程式的行為變得不可預測。有序性要求指令的執行順序符合程式設計師的預期,確保記憶體訪問操作的順序一致,從而防止因重排序導致的執行緒安全問題。

相關文章