There is a point in systems programming where concurrency stops being about “running things at the same time” and starts becoming a conversation about guarantees.

Most programmers first learn concurrency through locks.

You have shared data.

You protect it with a mutex.

One thread enters.