Shared mutable data concurrency is hard because it removes ability to locally reason about code.
x=1 x++ assert(x==2)
x = 1; assert(x==1); // May fail in a parallel world