Dear all,
I'm wondering why the code in [1] is not working as expected. Expected means getting back a map with 100 keys.
Instead I get a random number of keys which denotes the fact (proved by tracing) that the map in store is updated concurrently without respecting the lock annotations.
Is there a way to obtain synchronized access to key/values of the default store?
Thank you.
Kind regards,
Marco.
[1]
declare %updating %basex:lock('CONFIG') function local:write($k as xs:string) { store:put("config", map:put(store:get("config"), $k, random:integer(10))) };
let $s1 := store:put("config", map{}) let $s2 := xquery:fork-join(for $i in (1 to 100) return function(){ local:write("key" || $i) }) return count(map:keys(store:get("config")))