I'm trying to use locks and condition variable from the locks module, the documentation I found [here](https://nim-lang.org/docs/locks.html) seems to be quite poor, then I assumed that condition variables works like std::condition_variable in C++ that I've already used in the past. In particular I assumed that the wait function needs to be called on a Cond while holding a lock and this causes the thread to be stopped and the locks released until another thread calls signal on the Cond. This seems not to be the case since this very basic example results in a deadlock.
What's wrong with it and how does Cond works? import locks import deques import cpuinfo var thr = newSeq[Thread[int]](countProcessors()) lock: Lock cond : Cond proc threadFunc(i: int) {.thread.} = withLock(lock): cond.wait(lock) echo i initLock(lock) initCond(cond) withLock(lock): for i in 0..<thr.len: createThread(thr[i], threadFunc, i) for i in 0..<thr.len: cond.signal() for i in 0..<thr.len: joinThreads(thr)