import std/os import std/osproc import pkg/unittest2 import pkg/taskpools import pkg/stew/ptrops import pkg/datastore/threads/semaphore suite "Test semaphore": test "Should work as a mutex/lock": var tp = TaskPool.new(countProcessors() * 2) lock = Semaphore.init(1) # mutex/lock resource = 1 count = 0 const numTasks = 1000 proc task(lock: ptr Semaphore, resource: ptr int, count: ptr int) = lock[].acquire() resource[] -= 1 doAssert resource[] == 0, "resource should be 0, but it's: " & $resource[] resource[] += 1 doAssert resource[] == 1, "resource should be 1, but it's: " & $resource[] count[] += 1 lock[].release() for i in 0..