ylioo

One-to-Many Locking Mechanism

function acquireLock() {
    // Implementation by a lock file
}

function releaseLock() {
    // Implementation by a lock file
}

function updateCounter(operation) {
    acquireReadLock();
    if (operation === "increment") {
        COUNTER++;
    } else if (operation === "decrement") {
        COUNTER--;
    }
    releaseReadLock();
}

function runWrite() {
    if (COUNTER === 0) {
        acquireWriteLock();
        // Write
        releaseWriteLock();
    }
}

function runRead() {
    if (COUNTER === 0) acquireWriteLock();
    updateCounter("increment");
    
    // Read
    
    updateCounter("decrement");
    if (COUNTER === 0) releaseWriteLock();
}