skynet call可能引发的bug

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
相关推荐
吴声子夜歌2 小时前
小程序——转发API
java·前端·小程序
JTCC2 小时前
Java 设计模式西游篇 - 第三回:策略模式换法宝 三打白骨精变招
java·设计模式·策略模式
hjuan___2 小时前
Maven 中 test 的真正含义:限制测试类专用 & 打包自动跳过测试
java·maven·scope
云烟成雨TD2 小时前
Spring AI 1.x 系列【9】ChatOptions 配置解析
java·人工智能·spring
heartbeat..2 小时前
Java操作ZooKeeper 从入门到实战:分布式协调框架核心教程
java·分布式·spring cloud·微服务·java-zookeeper
_frank2222 小时前
windows idea使用wsl进行开发spring项目以及一些踩坑
java·spring·intellij-idea
sichuanwuyi2 小时前
wydevops——最佳应用场景解析
java·开发语言·云原生·云计算·paas·devops
Rick19932 小时前
spring如何解决循环依赖
java·后端·spring·循环依赖
行者-全栈开发2 小时前
接口性能优化完整案例:500ms→50ms
java·spring boot·spring cloud·性能优化·java-zookeeper