Hàm cập nhật nguyên tử RenderScript
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Tổng quan
Để cập nhật các giá trị được chia sẻ giữa nhiều luồng, hãy sử dụng các hàm dưới đây.
Chúng đảm bảo rằng các giá trị được cập nhật nguyên tử, tức là việc đọc bộ nhớ, cập nhật và ghi bộ nhớ được thực hiện theo đúng thứ tự.
Các hàm này chậm hơn các hàm tương đương không phải nguyên tử, vì vậy, chỉ sử dụng các hàm này khi cần đồng bộ hoá.
Xin lưu ý rằng trong RenderScript, mã của bạn có thể sẽ chạy trong các luồng riêng biệt mặc dù bạn không tạo các luồng đó một cách rõ ràng. Thời gian chạy RenderScript rất thường xuyên chia tách quá trình thực thi của một hạt nhân trên nhiều luồng. Bạn nên cập nhật tập lệnh toàn cục bằng các hàm nguyên tử. Nếu có thể, hãy sửa đổi thuật toán của bạn để tránh hoàn toàn chúng.
Tóm tắt
Hàm
rsAtomicAdd
: Bổ sung an toàn cho luồng
Tham số
địa chỉ URL | Địa chỉ của giá trị cần sửa đổi. |
value | Số tiền cần thêm. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Thêm một giá trị nguyên tử vào giá trị tại addr, tức là *addr += value
.
rsAtomicAnd
: Bitwise an toàn cho luồng và
Tham số
địa chỉ URL | Địa chỉ của giá trị cần sửa đổi. |
value | Giá trị đối với và với. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Nguyên tử thực hiện một bitwise và hai giá trị, lưu trữ kết quả trở lại tại addr, tức là *addr &= value
.
rsAtomicCas
: So sánh và thiết lập an toàn cho luồng
Tham số
địa chỉ URL | Địa chỉ của giá trị cần so sánh và thay thế nếu kiểm thử thành công. |
giá trị so sánh | Giá trị để kiểm tra *addr. |
giá trị mới | Giá trị cần ghi nếu kiểm thử thành công. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Nếu giá trị tại addr khớp với matchingValue, thì giá trị newValue sẽ được ghi là addr,
tức là if (*addr == compareValue) { *addr = newValue; }
.
Bạn có thể kiểm tra để đảm bảo giá trị đã được viết bằng cách kiểm tra để đảm bảo rằng giá trị mà rsAtomicCas() trả về là validValue.
rsAtomicDec
: Giảm an toàn cho luồng
Tham số
địa chỉ URL | Địa chỉ của giá trị sẽ giảm. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Nguyên tử trừ một giá trị tại addr. Giá trị này tương đương với rsAtomicSub(addr, 1)
.
rsAtomicInc
: Gia tăng an toàn cho luồng
Tham số
địa chỉ URL | Địa chỉ của giá trị cần tăng. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Thêm một phần tử vào giá trị tại addr. Giá trị này tương đương với rsAtomicAdd(addr, 1)
.
rsAtomicMax
: Tối đa an toàn cho luồng
Tham số
địa chỉ URL | Địa chỉ của giá trị cần sửa đổi. |
value | Giá trị so sánh. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Đặt giá trị tại addr thành tối đa là *addr và value, tức là *addr = max(*addr, value)
.
rsAtomicMin
: Mức tối thiểu an toàn cho luồng
Tham số
địa chỉ URL | Địa chỉ của giá trị cần sửa đổi. |
value | Giá trị so sánh. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Đặt giá trị tại addr thành mức tối thiểu của *addr và value, tức là *addr = min(*addr, value)
.
rsAtomicOr
: Bitwise an toàn cho luồng hoặc
Tham số
địa chỉ URL | Địa chỉ của giá trị cần sửa đổi. |
value | Giá trị đối với hoặc bằng. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Thực hiện nguyên tử một hoặc hai giá trị, lưu trữ kết quả tại addr, tức là *addr |= value
.
rsAtomicSub
: Phép trừ an toàn cho luồng
Tham số
địa chỉ URL | Địa chỉ của giá trị cần sửa đổi. |
value | Số tiền bị trừ. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Trừ một giá trị nguyên tử khỏi giá trị tại addr, tức là *addr -= value
.
rsAtomicXor
: Bitwise an toàn cho luồng độc quyền hoặc
Tham số
địa chỉ URL | Địa chỉ của giá trị cần sửa đổi. |
value | Giá trị thành xor bằng. |
Giá trị trả về
Giá trị của *addr trước thao tác. |
Nguyên tử thực hiện xor bitwise của hai giá trị, lưu trữ kết quả tại addr, tức là *addr ^= value
.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2024-04-02 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2024-04-02 UTC."],[],[]]