以下是使用条件变量的典型方法:
// 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();
但是,如果 protected_by_mutex_var 是通过比较和交换指令原子设置的,那么互斥锁是否有任何用途(除了 pthread 和其他 API 要求您传入互斥锁)?是用来实现条件的保护状态吗?如果不是,那么这样做是否安全?:
// The writer
atomic_set(protected_by_mutex_var, desired_value);
some_condition.notify_all();
作者从不直接与读者的互斥锁交互?请注意,“protected_by_mutex_var”名称不再合适(不再受互斥保护)。如果是这样,不同的读者是否有必要使用相同的互斥锁?