. , - "" ( pthread_cond_t Unix- ).
:
, . :
- , , .
- , , , - . , , .
- , . , .
:
mutex_t global_mutex
hashmap_t map
lock(global_mutex)
w = map.get(key)
if (w == NULL) {
w = new Wrapper
map.put(key, w)
unlock(global_mutex)
v = compute_value()
lock(global_mutex)
w.set(v)
signal(w.cond)
unlock(global_mutex)
return v
} else {
v = w.get()
while (v == NULL) {
unlock-and-wait(global_mutex, w.cond)
v = w.get()
}
unlock(global_mutex)
return v
}
pthreads lock pthread_mutex_lock(), unlock is pthread_mutex_unlock(), unlock-and-wait is pthread_cond_wait() signal is pthread_cond_signal(). unlock-and-wait ; , .
, . :
, , - , : , . , , , , .
: . int, , , . Windows: Win32 , , " "; , Win32 CreateMutex(), - , , . , Java , Java, , .