Skip to content

Conversation

@uncerso
Copy link
Owner

@uncerso uncerso commented Jun 5, 2018

No description provided.

member v.Get() =
Monitor.Enter lockObject
if res.IsNone then
res <- Some <| supplier()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И тут в supplier может произойти исключение, которое никто не ловит, монитор остаётся захваченным, дедлок. Есть библиотечная функция lock, которая справляется лучше. Ещё, кстати, имеет смысл прочитать про double-checked locking: https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html --- такое решение, как у Вас, достаточно хорошо для нашего недокурса по параллельному программированию, но заставляет потоки выстраиваться в очередь на мониторе и убивает весь профит от многопоточности.

let res = ans.[0]
for i in 1..n - 1 do
ans.[i] |> should equal res
printf "Ok"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше разбить на несколько тестов, с нормальными названиями

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants