Fencing tokens might be fine to prevent data corruption but they don't suffice to guarantee mutual exclusion.
For instance, if you need to deal with an external API and you need to avoid the same request going out twice and you have logic that could in theory lead to that, e.g. via concurrent retry mechanisms, at least once semantics, etc.
What's the solution for ensuring code execution under mutual exclusion in a distributed system?