Is volatile necessary when using a lock to read/write the variable? - C#