как заблокировать объект с помощью F#?

Предположим, у меня есть следующий код:

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 = 8

val a : float ref = {содержание = 8.0;}
val t1 : System.Threading.Thread

unlocked

Почему a равно 8. , когда я заблокировал ее? Можно ли заблокировать запись с изменяемыми значениями и ссылками?

PS: Мне нужно заблокировать объект, к которому обращаюсь я и в то же время WCF.

14
задан pad 8 December 2011 в 07:38
поделиться