Предположим, у меня есть следующий код:
let a = ref 4.
printfn "1) a = %g" !a
let t1 = System.Threading.Thread (fun () ->
lock a (fun () ->
printfn "locked"
System.Threading.Thread.Sleep 1000
printfn "unlocked") )
t1.Start()
System.Threading.Thread.Sleep 100
a := 8.
printfn "2) a = %g" !a
Что дает следующий результат:
1) a = 4
заблокирован
2) a = 8val a: float ref = {contents = 8.0;}
val t1: System.Threading.Threadразблокирована
Почему a
равно 8.
, когда я заблокировал его? Можно ли заблокировать запись с изменяемыми значениями и ссылками?
PS: Мне нужно заблокировать объект, к которому я одновременно обращаюсь, и в то же время WCF.