Oracle Coherence, which is very stable and mature, includes mutual exclusion support:
cache.lock(key, -1);
try {
// .. add your critical code here
} finally {
cache.unlock(key);
}
Locks survive server failures, rolling re-starts, etc.
For the sake of full disclosure, I work at Oracle. The opinions and views expressed in this post are my own, and do not necessarily reflect the opinions or views of my employer.