skynet.call 是同步阻塞(协程级),if 判断仅在执行瞬间有效,call 阻塞期间变量可能被其他消息修改
Lua
local test = 10
-- 场景1:处理某个消息时执行
function CMD.some_cmd()
if 0 < test then
-- skynet.call 阻塞当前协程,等待目标服务返回
local ret = skynet.call("target_svc", "lua", "do_something")
-- 【风险点】call 返回后,test 可能已被修改
print("test值:", test) -- 此时test可能≤0
end
end
-- 场景2:其他消息触发修改test
function CMD.change_test()
test = 0 -- 修改test的值
end
