Reads and writes to certain primitive types in C# such as bool and int are atomic.
(See section 5.5, \"5.5 Atomicity of variable reference
If you examine the auto-generated code, you'll see that auto-generated properties are NOT thread safe - they are simple get/set to a generated field. In fact, it would be too much of a performance hit to do so (especially when not needed).
In addition, if you are planning on access int/bool values from multiple threads then you should mark it (the field) as volatile. This basically prevents multithreading issues related to CPU registers. (This is in addition to locking, not an alternative)