mortice
    Preparing search index...

      mortice

      • Reads occur concurrently
      • Writes occur one at a time
      • No reads occur while a write operation is in progress
      • Locks can be created with different names
      • Reads/writes can time out
      import mortice from 'mortice'
      import delay from 'delay'

      // the lock name & options objects are both optional
      const mutex = mortice()

      Promise.all([
      (async () => {
      const release = await mutex.readLock()

      try {
      console.info('read 1')
      } finally {
      release()
      }
      })(),
      (async () => {
      const release = await mutex.readLock()

      try {
      console.info('read 2')
      } finally {
      release()
      }
      })(),
      (async () => {
      const release = await mutex.writeLock()

      try {
      await delay(1000)

      console.info('write 1')
      } finally {
      release()
      }
      })(),
      (async () => {
      const release = await mutex.readLock()

      try {
      console.info('read 3')
      } finally {
      release()
      }
      })()
      ])
      read 1
      read 2
      <small pause>
      write 1
      read 3
      

      Mutexes are stored globally reference by name, this is so you can obtain the same lock from different contexts, including workers.

      When a mutex is no longer required, the .finalize function should be called to remove any internal references to it.

      import mortice from 'mortice'

      const mutex = mortice()

      // ...some time later

      mutex.finalize()

      Interfaces

      Mortice
      MorticeOptions
      Release

      Functions

      default