Open yawaramin opened 8 months ago
This seems not quite the same as your #336 proposal - in fact, it seems incompatible with that idea (of storing the protected resource inside the mutex). Here it's passed as an argument instead.
This "wrap" is effectively the same as "use", except using the alternative API style of taking an argument for the function.
e.g. it allows writing wrap_ro m foo x
instead of use_ro m (fun () -> foo x)
.
The problem usually with this form is that it's really easy to mess it up when you have more than one argument:
wrap_ro m foo x y
Tthis takes m
while creating the partially-applied foo x
, but then runs foo x y
without the lock, which was probably not what was wanted.
Introduce wrappers that can turn any function
f : a -> b
into a new function that runs with a wrapped mutex.a
can even be a mutable value that can then be modified only while the mutex is held.Fix #336