Đây là cách thông thường để sử dụng một biến trạng:Biến điều kiện vẫn cần một mutex nếu bạn thay đổi giá trị được kiểm tra một cách nguyên tử?
// The reader(s)
lock(some_mutex);
if(protected_by_mutex_var != desired_value)
some_condition.wait(some_mutex);
unlock(some_mutex);
// The writer
lock(some_mutex);
protected_by_mutex_var = desired_value;
unlock(some_mutex);
some_condition.notify_all();
Nhưng nếu protected_by_mutex_var được thiết lập nguyên tử bằng cách nói rằng, một hướng dẫn so sánh-và-swap, không mutex phục vụ bất cứ mục đích (trừ rằng pthreads và khác API yêu cầu bạn vượt qua trong một mutex)? Là nó bảo vệ nhà nước được sử dụng để thực hiện các điều kiện? Nếu không, có an toàn không khi thực hiện việc này ?:
// The writer
atomic_set(protected_by_mutex_var, desired_value);
some_condition.notify_all();
Với tác giả không bao giờ tương tác trực tiếp với trình đọc của mutex? Lưu ý rằng tên 'protected_by_mutex_var' không còn thực sự thích hợp nữa (nó không còn được bảo vệ bằng mutex nữa). Nếu vậy, có cần thiết là những độc giả khác nhau sử dụng cùng một mutex không?
Toàn bộ vấn đề của các biến điều kiện là họ làm cho "kiểm tra ngữ, mở khóa mutex, và ngủ "nguyên tử. –