Java記憶體模型FAQ(六)沒有正確同步的含義是什麼?

喝水會長肉發表於2021-12-02

沒有正確同步的程式碼對於不同的人來說可能會有不同的理解。在Java記憶體模型這個語義環境下,我們談到“沒有正確同步”,我們的意思是:

  1. 一個執行緒中有一個對變數的寫操作,

  2. 另外一個執行緒對同一個變數有讀操作,

  3. 而且寫操作和讀操作沒有通過同步來保證順序。

當這些規則被違反的時候,我們就說在這個變數上有一個“資料競爭”(data race)。一個有資料競爭的程式就是一個沒有正確同步的程式。

《Java記憶體模型FAQ(一) 什麼是記憶體模型》

《Java記憶體模型FAQ(二) 其他語言,像C++,也有記憶體模型嗎?》

《Java記憶體模型FAQ(三)JSR133是什麼?》

《Java記憶體模型FAQ(四)重排序意味著什麼?》

《Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?》


原文

What do you mean by “incorrectly synchronized”?

Incorrectly synchronized code can mean different things to different people. When we talk about incorrectly synchronized code in the context of the Java Memory Model, we mean any code where

  1. there is a write of a variable by one thread,

  2. there is a read of the same variable by another thread and

  3. the write and read are not ordered by synchronization

When these rules are violated, we say we have a data race on that variable. A program with a data race is an incorrectly synchronized program.



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2845385/,如需轉載,請註明出處,否則將追究法律責任。

相關文章