A common approach to mitigating the described data race without using blocking locks is to utilize a sequence lock.
A sequence lock is a blocking lock. If the writer dies between the two increment operations, then the readers will spin forever waiting for the counter to become even again.
Also, there's no guarantee of progress. The writer can starve the reader forever.
This is why wait-free and lock-free are separate concepts. Author is not claiming wait-free.