volatile 保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是立即可見的。
public
class
volatilecase
}public
static
void
main
(string[
] args)
}
得出的結果:
printthread is running..
.....
main is ended!
ready不加 volatile 時,子執行緒無法感知主線程修改了 ready 的值,從而不會退出迴圈,而加了 volatile 後,子執行緒可以感知主線程修改了 ready 的值,迅速退出迴圈。
但是 volatile 不能保證資料在多個執行緒下同時寫時的執行緒安全,例如下面的例子:
public
class
notsafe
public
void
setcount
(long count)
//count進行累加
public
void
inccount()
//執行緒
private
static
class
count
extends
thread
@override
public
void
run()}
}public
static
void
main
(string[
] args)
throws interruptedexception
}
得出的結果並不是2000:
17123
process finished with exit code 0
執行緒管理 互斥量同步機制
互斥量機制 在計算機系統中有許多共享資源不允許使用者並行使用,像印表機這樣的共享裝置被稱為 排它性資源 因為它一次只能由乙個執行流訪問。執行流必須以互斥的方式 執行訪問排它性資源的 互斥量 mutex 又稱為互斥鎖,是一種用來保護臨界區的特殊變數,它可以處於鎖定 locked 狀態,也可以處於解鎖 ...
執行緒同步機制之互斥量
一 互斥量的概念 互斥量 mutex 從概念上來說類似於乙個二進位制訊號量,即初始值為1的訊號量。互斥量被獲取之後就不能再被獲取,因此對互斥體的獲取和釋放操作常常稱為加鎖和解鎖操作。互斥量只能由獲取它的執行緒進行釋放,如果違反這一原則,則結果是未定義的。互斥量從本質上說是一把鎖,在訪問共享資源前對互...
windows多執行緒同步機制 互斥量
handle createmutex lpsecurity attributes lpmutexattributes,安全屬性 bool binitialowner,初始化的擁有執行緒 lpctstr lpname 名稱 binitialowner true表示當前建立互斥 量的執行緒擁有互斥,fa...