I have a class of type Variable which contains an field of type Value, which initially is unset (null) but will be set at some point in the future. Multiple threads may have access to one Variable-object. A method with the signature Variable.Set(Value v) is called exactly once and sets the variable. Many other threads should be able to call Variable.Wait() (both before and after the Variable is set) which:
- if the
Variableis already set, should return immediately. - if the
Variableis not set, should wait (efficiently) for it to be set, and then return.
As I am looking at the API, I am sure that there is some obvious synchronization primitive around – monitors, events, wait handles or similar – but I need help figuring out the simplest, most efficient solution as I am learning about parallelism in .NET.