Noah Lavine <noah.b.lav...@gmail.com> writes:

> I'm not sure I understand the issue, but I think I was imagining
> something like
>
> if (variable == SCM_BOOL_F) {
>   acquire_mutex(var_mutex);
>   if (variable == SCM_BOOL_F) {
>     variable = initialize_variable();
>     memory_barrier();
>   }
>   release_mutex(var_mutex);
> }
>
> That's really just a normal locking scheme with an added memory
> barrier to make sure that all threads see an update after the first
> thread updates the variable. Would that work?

No.  There's no portable memory barrier that can be used only by the
writer of a shared variable.  The reader must also do synchronization in
order to prove the "happens-before" relationship.

    Regards,
      Mark

Reply via email to