class StopIt
{
private bool stop;
void Loop()
{
while (!stop)
{
// work
}
}
void Stop()
{
stop = true;
}
}
Về cơ bản, nếu phương pháp Loop đang chạy trong một luồng và Dừng được gọi từ một phương thức khác sẽ dừng hoạt động đúng cách? Tôi hiểu rằng bool đọc/ghi là nguyên tử. Nhưng, là đủ? Nếu vòng lặp thread không dừng lại ngay lập tức thì có vấn đề. Tôi có nên đánh dấu dừng biến động không?Là một hoạt động nguyên tử đủ
Quy tắc của tôi: nếu bạn không biết chính xác những gì có nghĩa là dễ bay hơi, bạn không nên cố gắng viết các chương trình khóa miễn phí. Vì bạn đang đặt câu hỏi, bạn không biết nó có nghĩa là gì. Vì vậy, không cố gắng viết một chương trình không khóa. Hãy an toàn. Sử dụng khóa. Khóa chỉ đắt tiền khi tranh luận; Đừng cố gắng làm cho nó không khóa cho đến khi bạn chắc chắn rằng (1) bạn có vấn đề về hiệu suất (2) khóa là nguyên nhân của vấn đề và (3) bạn hiểu những gì có nghĩa là dễ bay hơi xuống mức phần cứng bộ vi xử lý. –
Tôi không nên sử dụng khóa khi dừng truy cập? Nếu có, thì làm cách nào để khóa truy cập đọc trong vòng lặp while? –
@yummy: rất khó để đọc khi có vẻ như bây giờ, vì bạn truy cập trực tiếp vào trường trong vòng lặp while. Nếu bạn đóng gói mà đọc trong một tài sản (hoặc một phương pháp), bạn có thể sử dụng một khóa để đọc valu. –