在Lua lanes之间进行锁定

我试图在2个Lua lanes之间使用锁,但观察到两个lanes同时进入 lock_func 函数。以下是代码片段

从下面的输出中,我们可以看到两个lanes同时进入了 lock_func 函数

上面的代码中锁的实现是否有问题?

点赞
用户2824473
用户2824473

在 Lua 中实现锁可以如下代码片段所示。下面的代码只会从写入或读取线程的打印输出中执行,因为任何获得锁的线程都将进入一个无限循环(只是为了查看锁是否按预期工作),并且其他线程将等待锁被释放。

require"lanes"

local linda = lanes.linda()
f = lanes.genlock(linda,"M",1)

local function readerThread()
require"lanes"

f(1)
print("readerThread acquiring lock")
while(true) do
end
f(-1)

end

local function writerThread()
require"lanes"

f(1)
print("writerThread acquiring lock")
while(true) do
end
f(-1)

end

Thread1= lanes.gen("*",{globals = _G},writerThread)
Thread2= lanes.gen("*",{globals = _G},readerThread)

T1 = Thread1()
T2 = Thread2()

T1:join()
T2:join()
2013-10-07 18:32:22