import std/options import std/sequtils import std/algorithm import std/locks import std/os import pkg/unittest2 import pkg/questionable import pkg/questionable/results include ../../datastore/databuffer type AtomicFreed* = ptr int proc newFreedValue*(val = 0): ptr int = result = cast[ptr int](alloc0(sizeof(int))) result[] = val proc getFreedValue*(x: ptr int): int = atomicLoad(x, addr result, ATOMIC_ACQUIRE) proc incrFreedValue*(x: ptr int): int = atomicAddFetch(x, 1, ATOMIC_ACQUIRE) proc decrFreedValue*(x: ptr int): int = atomicSubFetch(x, 1, ATOMIC_ACQUIRE) var shareVal: DataBuffer lock: Lock cond: Cond var threads: array[2,Thread[int]] proc thread1(val: int) {.thread.} = echo "thread1" {.cast(gcsafe).}: for i in 0..