Java 8 đã thêm ba hàng rào vào sun.misc.Unsafe
.Tài liệu Java Unsafe.storeFence() sai?
Tôi cảm thấy bối rối sau khi đọc tài liệu của họ.
Vì vậy, tôi đã tìm kiếm trên web và tìm thấy điều này link.
Theo trang ở trên, tôi tin rằng các phương pháp này gần như không có gì trong thực tế. Đúng nếu tôi sai, gần như nói, loadFence(), storeFence() và fullFence() tương ứng với đọc dễ đọc, viết lười và viết dễ bay hơi, mặc dù về mặt kỹ thuật, các hàng rào này mạnh hơn các biến dễ bay hơi. Vì vậy, loadFence() là một hàng rào có được, và storeFence() là một hàng rào phát hành, và fullFence() là hàng rào đầy đủ.
Nhưng sau đó tài liệu cho storeFence() trông lạ.
Nó nói,
/**
* Ensures lack of reordering of stores before the fence
* with loads or stores after the fence.
*/
void storeFence();
Đó không giống như một hàng rào phát hành. Làm thế nào là nó phải được sử dụng? Không nên nó được
/**
* Ensures lack of reordering of loads or stores before the fence
* with stores after the fence.
*/
void storeFence();
tôi giả trước nghĩa trước đó và sau nghĩa sau.
EDIT
tôi không có nghĩa là "chúng tôi không sử dụng chúng trong sự phát triển bình thường" khi tôi nói những "hàng rào thêm gì trong thực tế".
Ý tôi là, ngay cả khi không có những phương pháp này trong Không an toàn, chúng tôi có thể nhận được các "hàng rào" này. Nếu tôi đúng, trên thực tế, đọc một biến động giả có hiệu ứng của loadFence(), và viết một biến động giả có tác dụng của fullFence(), và unsafe.putOrderedXXX() (hoặc AtomicInteger.lazySet()) có hiệu ứng của storeFence().
Chúng có thể có sự khác biệt tinh tế, nhưng trong triển khai hiện tại, chúng có thể trao đổi. (Dường như ngụ ý bởi liên kết)
Đó là ý của tôi "chúng không thêm gì mới".
KHÁC EDIT
này đã được cố định.
Xem https://bugs.openjdk.java.net/browse/JDK-8038978
Cảm ơn @ john-Vint
An [thực hiện liên kết] (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/50fdb38839eb/src /share/vm/opto/library_call.cpp#l3102) có thể hữu ích. –