Semaphore library Back


require('sem')

Include library before calling semaphore functions


[res1, [res2, [...]]] = sem.runlocked(name, timeout, callback, [param1, [param2, [...]]])

Runs callback function in locked mode, returning all callback results as is. First parameter passed to callback is lock status - true when lock was acquired, false when locking failed, nil when semaphore creation failed.

Parameters:

Example (event script with locking):

require('sem')

-- wait for 5 seconds max before executing callback
res1, res2 = sem.runlocked('eventlock', 5, function(lockres)
  -- lock acquired
  if lockres then
    return true, 'lock ok'
  -- failed to acquire lock
  else
    return nil, 'lock failed'
  end
end)

log(res1, res2)

semaphore = sem.open(name, [value = 1])

Opens shared semaphore, returns semaphore handle or generates an error on failure

Parameters:


semaphore:getvalue()

Returns the current value of the semaphore or nil on error. Zero value means that the semaphore is locked


semaphore:post()

Increments (unlocks) the semaphore


semaphore:trywait()

Checks if the semaphore is locked, returns true and decrements the semaphore when the value is non-zero, false otherwise


semaphore:wait([timeout])

Decrements the semaphore with optional timeout in seconds.
Warning when no timeout is specified, this function will block until semaphore is incremented.


semaphore:close()

Closes the semaphore. Not required, semaphore handles are closed automatically when script execution ends