並發基礎之執行緒安全

  • 2019 年 10 月 5 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/qq_37933685/article/details/80862795

個人部落格:https://suveng.github.io/blog/​​​​​​​

執行緒安全

1.原子性

原子性是指一個操作是不可中斷的。即使是在多個執行緒一起執行的時候,一個操作一旦開始,就不會被其它執行緒干擾

2.有序性

在並發時,程式的執行可能就會出現亂序

一條指令的執行是可以分為很多步驟的

  1. 取指 IF
  2. 解碼和取暫存器操作數 ID
  3. 執行或者有效地址計算 EX
  4. 存儲器訪問 MEM
  5. 寫回 WB

指令重排

指令重排可以使流水線更加順暢

3.可見性

可見性是指當一個執行緒修改了某一個共享變數的值,其他執行緒是否能夠立即知道這個修改。 – 編譯器優化 – 硬體優化(如寫吸收,批操作)

4.Happen-Before

程式順序原則:一個執行緒內保證語義的串列性 volatile規則:volatile變數的寫,先發生於讀,這保證了volatile變數的可見性 鎖規則:解鎖(unlock)必然發生在隨後的加鎖(lock)前 傳遞性:A先於B,B先於C,那麼A必然先於C 執行緒的start()方法先於它的每一個動作 執行緒的所有操作先於執行緒的終結(Thread.join()) 執行緒的中斷(interrupt())先於被中斷執行緒的程式碼 對象的構造函數執行結束先於finalize()方法

5.執行緒安全的概念

指某個函數、函數庫在多執行緒環境中被調用時,能夠正確地處理各個執行緒的局部變數,使程式功能正確完成