АГ
Size: a a a
АГ
YS
АГ
АХ
data Foo = Foo { foo :: X, bar :: Y }
type FooVar = MVar Foo
data Foo = Foo { foo :: MVar X, bar :: MVar Y}
foo
и bar
конкурентно, но если надо поменять и тот, и другой, то начинаются проблемы. Можно получить дедлок, если две нити берут локи в неправильном порядке:YS
YS
АГ
YS
АГ
KB
JS
YS
YS
АГ
YS
YS
АГ
АГ
АГ
АГ