Even your simple example isn't. Assuming both

`intvariable`

and `stringvariable`

are supposed to be updated at the same time, another thread could observe the state of `c1`

between the two assignments, leading to data corruption.For example, imagine two threads, one copying

`c2`

to `c1`

, and the other copying `c1`

to `c2`

:**Initial state:**

c1: (42, "The answer")

c2: (13, "Lucky number")

**Thread 1 starts:**

`c1.intvariable = c2.intvariable`

c1: (13, "The answer")

c2: (13, "Lucky number")

**Thread 2 runs:**

`c2.intvariable = c1.intvariable`

c1: (13, "The answer")

c2: (13, "Lucky number")

`c2.stringvariable = c1.stringvariable`

c1: (13, "The answer")

c2: (13, "The answer")

**Thread 1 resumes:**

`c1.stringvariable = c2.stringvariable`

c1: (13, "The answer")

c2: (13, "The answer")

Your state is now corrupt for both variables.