並發基礎之執行緒安全
- 2019 年 10 月 5 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/qq_37933685/article/details/80862795
個人部落格:https://suveng.github.io/blog/
執行緒安全
1.原子性
原子性是指一個操作是不可中斷的。即使是在多個執行緒一起執行的時候,一個操作一旦開始,就不會被其它執行緒干擾
2.有序性
在並發時,程式的執行可能就會出現亂序
一條指令的執行是可以分為很多步驟的
- 取指 IF
- 解碼和取暫存器操作數 ID
- 執行或者有效地址計算 EX
- 存儲器訪問 MEM
- 寫回 WB
指令重排



指令重排可以使流水線更加順暢
3.可見性
可見性是指當一個執行緒修改了某一個共享變數的值,其他執行緒是否能夠立即知道這個修改。 – 編譯器優化 – 硬體優化(如寫吸收,批操作)
4.Happen-Before
程式順序原則:一個執行緒內保證語義的串列性 volatile規則:volatile變數的寫,先發生於讀,這保證了volatile變數的可見性 鎖規則:解鎖(unlock)必然發生在隨後的加鎖(lock)前 傳遞性:A先於B,B先於C,那麼A必然先於C 執行緒的start()方法先於它的每一個動作 執行緒的所有操作先於執行緒的終結(Thread.join()) 執行緒的中斷(interrupt())先於被中斷執行緒的程式碼 對象的構造函數執行結束先於finalize()方法
5.執行緒安全的概念
指某個函數、函數庫在多執行緒環境中被調用時,能夠正確地處理各個執行緒的局部變數,使程式功能正確完成