Java: Truy cập atomic

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Trong lập trình, hành động atomic là hành động mà tính hiệu quả sẽ xảy ra cùng một lúc. Hành động atomic không thể dừng một cách lơ lửng: hoặc là nó xảy ra hoàn toàn, hoặc là nó không xảy ra. Không có hiệu ứng phụ khi một hành động atomic được nhìn thấy cho đến khi hành động là hoàn tất.

Ta đã thấy rằng biểu thức tăng giá trị, ví dụ như c++, không mô tả hành động atomic. Ngay cả những biểu thức rất đơn giản có thể định nghĩa các hành động phức tạp thì cũng có thể phân tách thành các hành động khác. Tuy nhiên, có những hành động mà bạn có thể xác định được là atomic:

  • Đọc và ghi là những hành động atomic cho các biến tham chiếu và cho phần lớn các biến nguyên kiểu thủy nhất (trừ kiểu long và kiểu double).

  • Đọc và ghi là những hành động atomic cho tất cả các biến được khai báo là volatile (bao gồm cả các biến long và double).

Hành động atomic không thể được xen kẽ, vì vậy chúng có thể được sử dụng mà không sợ bị luồng can thiệp. Tuy nhiên, điều này không loại bỏ những gì cần thiết cho việc đồng bộ hóa các hoạt động atomic, vì lỗi nhất quán bộ nhớ là vẫn có thể xảy ra. Việc sử dụng các biến volatile sẽ giảm được nguy cơ lỗi nhất quán bộ nhớ, bởi vì bất kỳ thao tác ghi nào vào một biến volatile sẽ thiết lập một quan hệ happens-before với việc đọc tuần tự cùng một biến. Điều này có nghĩa là những thay đổi của biên volatile sẽ luôn ảnh hưởng tới các luồng khác. Hơn nữa, điều này cũng có nghĩa là khi một luồng đọc một biến volatile, thì nó cho thấy rằng không chỉ là sự thay đổi mới nhất cho volatile , mà nó cũng gây ra tác dụng phụ cho mã dẫn lên các thay đổi.

Sử dụng biến atomic để truy cập sẽ hiệu quả hơn so với việc truy cập các biến thông qua mã đồng bộ hóa, nhưng đòi hỏi sự cẩn thận tỉ mỉ của các lập trình để tránh những lỗi nhất quán bộ nhớ.

Một số lớp trong gói java.util.concurrent cung cấp các phương thức atomic mà không dựa vào đồng bộ hóa. Chúng ta sẽ tìm hiểu chi tiết hơn trong bài viết Các đối tượng đồng thời bậc cao.

» Tiếp: Liveness
« Trước: Khóa nội tại và đồng bộ hóa
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!