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
相关推荐
WiChP5 小时前
【V0.1B5】从零开始的2D游戏引擎开发之路
java·服务器·数据库
cch89185 小时前
汇编与Java:底层与高层的编程对决
java·开发语言·汇编
荒川之神6 小时前
拉链表概念与基本设计
java·开发语言·数据库
cch89186 小时前
汇编与Go:底层到高层的编程差异
java·汇编·golang
chushiyunen6 小时前
python中的@Property和@Setter
java·开发语言·python
禾小西6 小时前
Java中使用正则表达式核心解析
java·python·正则表达式
yoyo_zzm6 小时前
JAVA (Springboot) i18n国际化语言配置
java·spring boot·python
APIshop6 小时前
Java获取京东商品详情接口(item_get)实战指南
java·linux·数据库
Mr.Entropy6 小时前
springboot2.x集成Flyway
java