Theo câu trả lời của câu hỏi this, có vẻ như LOCK CMPXCHG trên x86 thực sự gây ra một rào cản đầy đủ. Có lẽ, đây là những gì Unsafe.compareAndSwapInt()
tạo ra dưới mui xe là tốt. Tôi đang gặp khó khăn để xem tại sao đó là trường hợp: với giao thức MESI, sau khi bạn cập nhật dòng bộ nhớ cache, CPU có thể vô hiệu hóa chỉ dòng cache trên các lõi khác, thay vì thoát khỏi ALL store/load buffer của lõi đã thực hiện CAS? Có vẻ khá lãng phí đối với tôi ...So sánh và hoán đổi trên x86 - tại sao nó là một rào cản đầy đủ?
Trả lời
Câu trả lời của bạn theo như tôi có thể thấy trong phần bình luận - Bản cập nhật MESI lưu trữ, chứ không phải Store/Load buffers
. Nhưng khóa LOCK CMPXCHG
nói: locked operations serialize all outstanding load and store operation
- đây là lý do tại sao nó cần phải thoát khỏi bộ đệm cửa hàng/tải từ CPU này (và không phải những người khác như chi tiết here).
Vì vậy, CPU hiện tại phải thực hiện thao tác nguyên tử trên giá trị gần đây nhất - có thể nằm trong bộ đệm cửa hàng/tải, đó là lý do tại sao cần có hàng rào để thực sự thoát.
Tôi nhận được ya! chúng tôi cần phải đồng bộ hóa gully lên, chúng tôi trao đổi các dòng bộ nhớ cache, mát mẻ! Một điều nữa - O toàn bộ rào cản mem thực sự khiến bộ đệm cửa hàng của CPU khác bị bị xóa? Hoặc chỉ một chủ đề đang hoạt động? Nói cách khác, tôi đã có ấn tượng rằng những thay đổi đang chờ xử lý từ các CPU khác nằm trong bộ đệm tải của CPU, vì vậy rào cản mem chỉ thoát ra những cái – Bober02
@ Bober02 Tôi đã cập nhật câu trả lời để làm rõ hơn một chút - theo sự hiểu biết của tôi. – Eugene
- 1. So sánh và hoán đổi trong C++
- 2. Tại sao tôi cần một rào cản bộ nhớ?
- 3. Khóa vs So sánh và hoán đổi
- 4. rào cản Memory và Linux kernel spinlock trên TILE-Gx
- 5. Rào cản liên khối trên CUDA
- 6. các rào cản đọc và viết các rào cản trong khối đồng bộ
- 7. Tại sao hàng rào tải hàng bị coi là đắt?
- 8. Rào cản bộ nhớ và ví dụ java.util.concurrent.locks.Condition
- 9. Các rào cản bộ nhớ và các hoạt động liên khóa
- 10. Rào cản không đồng bộ trong F #
- 11. Triển khai rào cản java tùy chỉnh
- 12. Rào cản bộ nhớ trong không gian người dùng? (Linux, x86-64)
- 13. selenium cài đặt rào cản "importfirefoxdriver"
- 14. Rào cản đồng bộ hóa Qt?
- 15. x86 assembler: điểm nổi so sánh
- 16. Tại sao một tuyên bố nội tuyến không phải là một loại không đầy đủ?
- 17. so sánh khóa hashmap, tại sao so sánh cả mã băm và khóa của khóa cả
- 18. như thế nào là một rào cản bộ nhớ trong kernel Linux được sử dụng
- 19. Tại sao Google Closure hoán đổi đối số?
- 20. Javascript: Tại sao so sánh với null?
- 21. Cả hai BeginInvoke và EndInvoke trên các đại biểu có tạo ra hàng rào đầy đủ không?
- 22. Tại sao không phải là một hàng rào C++ 11 gain_release đủ để đồng bộ hóa Dekker?
- 23. Chuyển đổi bản sao nông thành bản sao đầy đủ
- 24. CKSMSComposeRemoteViewController đã hết thời gian chờ đợi hàng rào rào cản từ com.apple.mobilesms.compose
- 25. Trong OpenCL, mem_fence() làm gì, trái với rào cản()?
- 26. Tại sao một bãi chứa SVN của một bản sửa đổi lớn hơn một bãi chứa đầy đủ?
- 27. Tại sao không phải là nguyên tử kép được triển khai đầy đủ
- 28. C + + Các rào cản bộ nhớ cho nguyên tử
- 29. Là viết thư cho một rào cản bộ nhớ dễ bay hơi trong Java
- 30. Tại sao lệnh x86-64 trên thanh ghi 32 bit không phải phần trên của thanh ghi 64 bit đầy đủ?
Với một rào cản đầy đủ, bạn sẽ thực sự tuôn ra tất cả các thay đổi dự đoán bị nhỡ, thay vì một dòng bộ nhớ cache, vì vậy sẽ không tồi tệ hơn với hàng rào đầy đủ? Nhưng rõ ràng tôi đang thiếu sth ở đây :) – Bober02
[So sánh và trao đổi] (https://en.wikipedia.org/wiki/Compare-and-swap) trên Wikipedia bao gồm điều này, * Nó so sánh nội dung của một vị trí bộ nhớ với một giá trị đã cho và, chỉ khi chúng giống nhau, hãy sửa đổi nội dung của vị trí bộ nhớ đó thành một giá trị mới nhất định. Điều này được thực hiện như một hoạt động nguyên tử duy nhất. Nguyên tử đảm bảo rằng giá trị mới được tính toán dựa trên thông tin cập nhật; nếu giá trị đã được cập nhật bởi một luồng khác trong khi chờ đợi, quá trình ghi sẽ thất bại. * Không có hàng rào đầy đủ, nó có thể bị gián đoạn (hoặc được cập nhật khác) và điều đó có thể làm mất hiệu lực atomicitiy. –