我一直threadpool
在 Nim 中使用,并且遇到了spawn
ed 函数不能接受可变参数的要求。但是,我想传递一个 proc a Lock
,它又必须是可变的,根据acquire
. 我发现解决这个问题的唯一方法是让锁可变并在全局范围内声明,所以我不必将它传递给函数 I spawn
。
但我真的宁愿避免这种情况。我有使用指针的想法——所以锁可以是可变的,但指针本身不是——来解决这个问题,但看起来指针在 Nim 中并不是真正的一流对象。我尝试只是将参数声明waitLock
为(第 3 行),但我仍然收到必须在此处传递 a而不是 aref
的抱怨。而且看起来取消引用指针也是自动完成的,所以没有办法解决它......?有什么办法可以绕过使用动态范围并将锁显式传递给proc?我不能做我想做的事有充分的理由吗?还是我只是错过了某些手册中的取消引用运算符?实现这一点的最干净的方法是什么?acquire
var Lock
ref Lock
import os, threadpool, locks
proc waitLock(lock: ref Lock): void =
acquire lock
echo "Child thread has lock!"
release lock
var lock: Lock
initLock lock
spawn waitLock(lock)
acquire lock
echo "Parent thread has lock!"
release lock
sync()
deinitLock lock