I am currently reading Joe Albahari's Threading in C# e-book, and sometimes in his example code, he uses locks in places where I don't see any thread safety issue. Here, for example, he locks around writing to and reading from the _status field, which refers to an immutable object.
I understand that if the ProgressStatus class were mutable, you would need to lock around reading from and writing to it, because if one thread were pre-empted in between updating the PercentComplete and StatusMessage fields by another thread reading the status, the second thread might get an invalid pair of values for those fields. (100% complete / "Operation in progress...")
But since ProgressStatus is immutable, no such invalid status can occur. If Joe removed both of those locks, what thread safety issue could arise?