C const和volatile可以並用嗎?

2021-09-06 12:08:48 字數 460 閱讀 3956

答案是肯定的,可以一起用。

因為很多人誤解了const的真正含義,很多初學者認為const修飾的就是常量,而常量不會改變,而既然不會改變,那volatile就沒有意義。

但是實際上這正是對const的誤讀,const其實只是一種限制約定,也就是某個東西x不能由const修飾的變數來修改,但是這個x仍然可以被其他非const修飾的變數來修改,比如

int x;

int* p = &x;

const int* q = &x;

*p=0; //允許

*q=0; //錯誤

雖然p和q指向同一塊記憶體,但是q的const並不能限制p的寫入,也就是說const只是限制了q的寫入,這是一種語法約定而已,並不表示q所指向的記憶體就是乙個常量並且絕對不會改變。

如果能理解這一點,那麼const和volatile放一起就並不奇怪了。而且這種用法在不同執行緒之間用來做一些狀態控制也是偶爾有見到的。

volatile和synchronized的區別

關於可見性的問題 可見性 即當讀寫兩個執行緒同時訪問同乙個變數時,用於確保寫執行緒更新變數後,讀執行緒再訪問該 變數時可以讀取到該變數最新的值。volatile和synchronized的區別 1.volatile本質是在告訴jvm當前變數在暫存器 工作記憶體 中的值是不確定的,需要從主存中讀取 s...

volatile和synchronize的區別

1.對變數的寫入操作不依賴變數的當前值,或者你能確保只有單個執行緒更新變數的值。2.該變數沒有包含在具有其他變數的不變式中。volatile僅能使用在變數級別 synchronized則可以使用在變數 方法 和類級別的 volatile僅能實現變數的修改可見性,不能保證原子性 而synchroniz...

volatile和synchronized的區別

public class runthread extends thread public void setrunning boolean isrunning override public void run system.out.println 執行緒執行完成了 public class run c...