Tôi có câu hỏi liên quan đến các rào cản bộ nhớ khi sử dụng Condition
được cung cấp bởi Lock
.Rào cản bộ nhớ và ví dụ java.util.concurrent.locks.Condition
Về ví dụ được cung cấp trong the javadoc for Condition
, tôi có một câu hỏi về việc sử dụng:
int putptr, takeptr, count;
nên không những thuộc tính được khai báo biến động? Như tôi đã hiểu từ ví dụ này, một chuỗi có thể không thấy các sửa đổi, ví dụ: count
.
Hoặc là, khi signal()
được gọi, tất cả các sửa đổi được thực hiện kể từ khi khóa được mua lại được hiển thị cho các chủ đề khác? Giống như một số mã trong khối synchronized
?
Nếu có, các sửa đổi có thể hiển thị khi gọi signal()
hoặc khi số unlock()
được gọi trên khóa không?
Cảm ơn.
Edit: Tôi nhìn thấy trong javadoc của Lock
:
Tất cả Khóa triển khai phải thực thi cùng một ngữ nghĩa đồng bộ hóa bộ nhớ theo quy định của được xây dựng trong khóa màn hình, như mô tả trong phần 17.4 Java ™ Ngôn ngữ Đặc điểm kỹ thuật:
- Thao tác khóa thành công có tác dụng đồng bộ hóa bộ nhớ giống như thao tác Khóa thành công.
- Thao tác mở khóa thành công có cùng hiệu ứng đồng bộ hóa bộ nhớ dưới dạng tác vụ Mở khóa thành công.
Thao tác khóa và mở khóa không thành công và thao tác khóa/mở khóa reentrant, không yêu cầu bất kỳ hiệu ứng đồng bộ hóa bộ nhớ nào.
Họ có nghĩa là: "Một hoạt động khóa thành công có những tác động đồng bộ hóa bộ nhớ giống như bước vào một khối synchronized
", và "Một hoạt động mở khóa thành công có những tác động đồng bộ hóa bộ nhớ giống như thoát khỏi một khối synchronized
"?
hiệu ứng giống với 'đồng bộ' và' Object.wait(), Object.notify() ' – irreputable
' await() 'không mở khóa khi nhập và khóa khi thoát. – irreputable