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
相关推荐
带刺的坐椅4 分钟前
Solon AI:Tool 与 Talent 怎么选?从函数到领域专家
java·ai·llm·agent·solon
小白说大模型26 分钟前
AI Agent 调试实战:链路追踪、Prompt 可视化与异常定位的系统方法
java·人工智能·python·算法·prompt
静水楼台x27 分钟前
spring security
java·数据库·spring
重生之我是Java开发战士28 分钟前
【Java EE】Spring Boot配置文件
java·spring boot·java-ee
Tim_1029 分钟前
【C++】019、内存泄漏
java·开发语言
咖啡八杯1 小时前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
要开心吖ZSH3 小时前
一文搞懂:JDK 21 虚拟线程 vs N种异步方案,到底该怎么选?
java·数据库·jdk·虚拟线程
guodingdingh8 小时前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯9 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育10 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g