Cách tiếp cận hơi cơ học (và hơi vẫy tay) đối với loại câu hỏi này là nguyên tử đảm bảo ba điều: đọc và viết sẽ không bị rách bởi công tắc ngữ cảnh (vì vậy bạn chỉ thấy các giá trị thực sự được lưu trữ trong biến); bộ nhớ cache nhận được đỏ mặt (vì vậy bạn không thấy giá trị cũ); và trình biên dịch không thể di chuyển các lệnh trên một hoạt động nguyên tử (vì vậy các phép toán xảy ra một cách hợp lý trước khi truy cập nguyên tử thực tế xảy ra trước truy cập đó). Lưu ý rằng tôi đã cố gắng tránh bất kỳ khái niệm về "thread" ở đây, mặc dù nó được một chút lao động.
Nếu bạn đang viết cơ chế luồng của riêng mình, các thuộc tính này rõ ràng là quan trọng. Họ là trực giao với các chi tiết của cơ chế luồng mà bạn đang sử dụng. Đối với các trình xử lý tín hiệu, chúng cung cấp cho bạn một vị trí để kiểm tra các giá trị từ mã được thực hiện trong trình xử lý tín hiệu và khi trình xử lý tín hiệu cần sửa đổi các giá trị mà phần còn lại của chương trình quan tâm.
Tôi không chắc liệu tiêu chuẩn chính thức có giải quyết ISR hay không, nhưng từ quan điểm cơ học này, ISR không khác với tín hiệu không đến từ một cuộc gọi đến raise
. Nó chỉ là một cuộc gọi hàm không đồng bộ và nó chiếm không gian ngăn xếp mà nó nhận được từ chuỗi bị gián đoạn. Đó chắc chắn là không phải một sợi; nó là một ký sinh trùng trên một sợi đã tồn tại. Vì vậy, đối với một ISR tôi muốn đi với các đảm bảo cho các tín hiệu hơn là đảm bảo cho các chủ đề.
Nguồn
2016-12-16 19:56:25
Lưu ý C++ 11 định nghĩa * chuỗi * trong '[intro.multithread]/1'. – NathanOliver
Nếu bạn chỉ có ISR, thay vì nhiều bộ xử lý/lõi, tôi muốn nói phần liên quan của tiêu chuẩn là một phần trên tín hiệu, chứ không phải là chuỗi. – EOF
@NathanOliver Cảm ơn, đã xóa câu khỏi câu hỏi. – mrn