2010-05-05 23 views

Trả lời

13

Không, ++i thực sự là ba hướng dẫn (tải i, increment, lưu trữ trong i). Nó chắc chắn không phải nguyên tử.

+0

Đó là những gì tôi nghĩ. Đọc giá trị, giá trị gia tăng, nhận giá trị. – Finbarr

+2

Và nó thậm chí không nguyên tử nếu 'i' được khai báo là' biến động'. –

6

Các hoạt động ++ không phải là nguyên tử trong java, bởi vì nó bao gồm ba hoạt động

  1. Đọc giá trị được lưu trữ (nguyên tử)
  2. Thêm một đến nó (nguyên tử)
  3. giá trị Store (nguyên tử)

Vì vậy, dứt khoát một cái gì đó xấu có thể xảy ra ở giữa

trong trường hợp dài, nó thậm chí còn phức tạp hơn bởi vì ngay cả bản thân hoạt động đọc cũng không phải là nguyên tử.

Tôi tìm thấy một bài viết tốt đẹp nói về mô hình bộ nhớ

http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic

Các vấn đề liên quan