併發基礎之執行緒安全

2021-08-21 03:16:29 字數 820 閱讀 1222

個人部落格:

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

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

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

取指 if

解碼和取暫存器運算元 id

執行或者有效位址計算 ex

儲存器訪問 mem

寫回 wb

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

可見性是指當乙個執行緒修改了某乙個共享變數的值,其他執行緒是否能夠立即知道這個修改。

– 編譯器優化

– 硬體優化(如寫吸收,批操作)

程式順序原則:乙個執行緒內保證語義的序列性

volatile規則:volatile變數的寫,先發生於讀,這保證了volatile變數的可見性

鎖規則:解鎖(unlock)必然發生在隨後的加鎖(lock)前

傳遞性:a先於b,b先於c,那麼a必然先於c

執行緒的start()方法先於它的每乙個動作

執行緒的所有操作先於執行緒的終結(thread.join())

執行緒的中斷(interrupt())先於被中斷執行緒的**

物件的建構函式執行結束先於finalize()方法

指某個函式、函式庫在多執行緒環境中被呼叫時,能夠正確地處理各個執行緒的區域性變數,使程式功能正確完成

多執行緒與高併發之執行緒安全

使用兩個執行緒模擬火車站兩個視窗同時買票的場景 定義乙個全域性變數count 100,定義乙個執行緒run方法中實現買票的模擬操作 count 最後在測試方法中定義兩個執行緒並啟動,實現買票操作 如下 public class threadtest01 implements runnable cat...

多執行緒 安全併發

同乙個,同時,多個 則執行緒會不安全 synchronized鎖物件,不是鎖方法 目標不對鎖定失敗,選好要鎖的物件,不是提款機,是提款人 public synchronized void test public void run 顧客 static class customer implements...

執行緒併發基礎

多核心 chip mutilprocessors 單晶元多處理器 cmp 多執行緒 simultaneous multithreading smt 如果在時間片結束時,程序還在執行,則cpu將被剝奪並分配給另乙個程序。如果程序在時間片結束之前阻塞或結束,則cpu當即進行切換。排程程式做的是維護一張就...