簡體   English   中英

synchronized的用例(new Object())

[英]A use-case for synchronized(new Object())

在最近的答案我認為這是可以實現的功能的volatile通過synchronizing含有我們需要的變量的對象volatile (提問者沒有訪問變量的代碼)。

這讓我覺得我實際上不需要阻塞包含對象,我只需要實現內存屏障。 由於synchronized實現同步內存屏障,如果我只需要內存屏障(如本例所示),那么使用synchronized(new Object())來實現我的內存屏障確保鎖永遠不會爭用它實際上會更好?

如下所述: http//www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#synchronization synchronized(new Object())被認為是noop,可以完全刪除編譯器。 你不會從中獲得內存障礙。

使用synchronized(new Object())來實現我的內存屏障並確保永遠不會爭用鎖定會更好嗎?

NOP。 JVM可以很容易地證明這個鎖不能被兩個線程訪問(因為它是一個線程局部變量)並且幾乎肯定會把它變成無操作,即完全刪除synchronized語句。

除了@ assylias的非常好的觀點之外,還要考慮synchronized不會通過規范實現內存屏障。 只有這樣才能在今天典型的CPU內存架構上實現它。 規范只保證當兩個線程獲得相同的鎖時會發生什么。

無論如何,如果你不關心規范,但只關心實際的實現,那么為什么不引入你自己的volatile變量,只要你想要一個內存屏障就可以寫入它? 這是無關緊要的,其 volatile你寫不出來,只要我們在談論一組受限的架構是由你的暗示synchronized(new Object())的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM