File locks have the advantage of unlocking in the event of an unexpected process death. I think they best suit your scenario.
I can imagine, using semaphores, when I need more complex semantics that they support (they do more than support using the mutex that you have in mind), but if I use them, I need to somehow do the job work in In the event of untimely death, I notice that Lotus Notes on Windows has a ZapNotes housewife, which I think is similar to the “shouldn't happen” scenario.
source share