Tôi biết rằng kiểm tra lại khóa mà không biến không ổn định là không an toàn dựa vào liên kết này http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.htmlLàm thế nào để phá vỡ khóa kiểm tra kép mà không dễ bay hơi
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null) {
helper = new Helper();
}
}
}
return helper;
}
}
Tôi muốn mô phỏng tình trạng này tại máy tính ở nhà của tôi. Tôi có tiêu chuẩn jdk1.7 và bộ xử lý đa lõi. Nhưng tôi không thể mô phỏng hành vi bị hỏng. Tôi đang sử dụng thử nghiệm này http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckTest.java mà nên mô phỏng này. Tôi cũng tạo một số thử nghiệm của mình nhưng không thành công. Bạn có bất kỳ ý tưởng làm thế nào để mô phỏng tình hình khi thành ngữ kiểm tra kép này mà không dễ bay hơi bị hỏng? Vì vậy, nó sẽ trả về lớp Helper được tạo một phần.
Vấn đề là bạn có thể đang chạy với bộ xử lý x86. Từ những gì tôi biết họ phát hành một rào cản StoreLoad sau khi xây dựng đối tượng như vậy trong trường hợp đó bạn sẽ không thấy một đối tượng được xây dựng một phần. Nếu bạn có thể nhận được một sparc hoặc hệ thống khác xử lý xây dựng khác nhau, bạn có lẽ sẽ có thể nhìn thấy vấn đề. –