Phương pháp AtomicXXX.lazySet (giá trị) có nghĩa là gì xảy ra trước các cạnh, được sử dụng trong hầu hết các lý do JMM? Các javadocs là tinh khiết vào nó, và Sun lỗi 6275329 trạng thái:AtomicXXX.lazySet (...) về mặt xảy ra trước các cạnh
Ngữ nghĩa là rằng ghi được đảm bảo không để được sắp xếp lại với bất kỳ ghi trước đó, nhưng có thể được sắp xếp lại với các hoạt động tiếp theo (hoặc tương đương, có thể không hiển thị với các chủ đề khác) cho đến khi một số hành động ghi hoặc đồng bộ dễ bay hơi khác xảy ra).
Nhưng đây không phải là lý do về các cạnh HB, do đó, nó gây nhầm lẫn cho tôi. Có nghĩa là những gì lazySet() ngữ nghĩa không thể được thể hiện trong điều khoản của HB cạnh?
CẬP NHẬT: Tôi sẽ cố gắng cụ thể hoá câu hỏi của mình. Tôi có thể sử dụng trường biến động bình thường trong tình huống sau:
//thread 1: producer
...fill some data structure
myVolatileFlag = 1;
//thread 2: consumer
while(myVolatileFlag!=1){
//spin-wait
}
...use data structure...
Trong này sử dụng kịch bản của "cấu trúc dữ liệu" trong tiêu dùng là đúng, vì cờ biến động ghi-đọc làm HB cạnh, cho đảm bảo tất cả những gì viết để "cấu trúc dữ liệu "bởi nhà sản xuất sẽ được hoàn thành và được người tiêu dùng nhìn thấy. Nhưng nếu tôi sử dụng AtomicInteger.lazySet/get thay vì viết/đọc dễ bay hơi trong trường hợp này thì sao?
//thread 1: producer
...fill some data structure
myAtomicFlag.lazySet(1);
//thread 2: consumer
while(myAtomicFlag.get()!=1){
//spin-wait
}
...use data structure...
sẽ vẫn đúng không? Tôi vẫn có thể thực sự hiển thị giá trị "cấu trúc dữ liệu" trong chuỗi tiêu thụ?
Nó không phải là "từ trên không" câu hỏi - Tôi đã nhìn thấy phương pháp như vậy trong Lmax đang Disruptor chính xác tình huống này, và tôi không hiểu làm thế nào để chứng minh điều đó là đúng ...
nếu phương thức lazySet đóng vai trò là hàng rào cửa hàng, bạn có thể sử dụng nó. Khi thread2 thấy cờ nó sẽ là ok để đọc cấu trúc. Các lazySet đảm bảo viết sẽ được hiển thị tại một số điểm và tất cả các kiến trúc cho phép hiển thị tự động, tức là nếu một cái gì đó nó được viết nó sẽ được hiển thị và cuối cùng phù hợp. – bestsss