Atomic operation là một hoạt động nguyên tử !

Định nghĩa: Hoạt động nguyên tử là một hoạt động hay một thao tác tính toán mà trong quá trình đó một processor có thể đồng bộ việc đọc và ghi dữ liệu trên cùng một bus tính toán. Điều này ngăn cản các processor khác hoặc thiết bị I/O từ việc ghi hay đọc bộ nhớ cho đến khi hoạt động atomic được hoàn tất.

Nguyên tử có nghĩa là không thể chia hoặc giản lược, do đó, một hoạt động nguyên tử phải được thực hiện hoàn toàn hoặc không gì cả.

Sau đây là một ví dụ trong Java, minh họa rõ ràng hơn cho những giải thích dài dòng ở trên. Giả sử foo là một biến kiểu long.

foo = 65465498L;

Thật vậy, biến foo được định nghĩa bởi 2 thao tác : Một là ghi 32 bit đầu, và hai là ghi 32 bit cuối. Điều đó có nghĩa rằng một thread khác có thể đọc giá trị của biến foo, và xem được giá trị của foo ở trạng thái trung gian.

Atomic Operation

Việc thiết kế một thao tác nguyên tử bằng cách sử dụng cơ chế đồng bộ để đảm bảo rằng các hoạt động thấy được, từ bất kỳ thread khác, là một thao tác đơn duy nhất. Có nghĩa là bất kỳ một thread khác, một khi thao tác được thực hiện nguyên tử, hoặc là sẽ thấy được giá trị của foo trước khi được gán, hoặc là sau khi được gán. Tức là không bao giờ thấy được giá trị trung gian.

Một cách làm đơn giản việc này là khai báo biến đó kiểu sẽ được sửa đổi bới các threads khác nhau với từ khóa volatile. Do đó, biến volatile chỉ có một bản chính mà sẽ được cập nhật đồng bộ giá trị đối với các threads khác nhau khi một thread nào đó thay đổi nó.

private volatile long foo;

Hoặc đồng bộ mọi truy cập tới foo:

public synchronized void setFoo(long value) {
    this.foo = value;
}

public synchronized void getFoo() {
    return this.foo;
}
// no other use of foo outside of these two methods, unless also synchronized

Hoặc thay thế bằng kiểu dữ liệu AtomicLong:

private AtomicLong foo;

About The Author

  • Kien Bui

    Lang thang kiếm ít thông tin vớ phải trang này của anh =))))

  • Tu vua su

    có cách tải lại file operations ko ad