游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2388|回复: 0

如何做到在跨服务器无锁完成交易

[复制链接]

1

主题

23

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2014-12-10 22:23:39 | 显示全部楼层 |阅读模式
本帖最后由 icesun963 于 2014-12-10 22:52 编辑

     最近在设计一个全新的分布式框架,努力在避开锁问题,当然不太可能做到完全的无锁,但是已经接近。这里简单介绍下如何做到在无锁环境下完成交易,而且是跨服操作。
    首先是几个概念:
1。数据唯一访问,仅允许创建该对象的线程访问本对象。
2。单线程多任务模式,允许在调用方法中中断或者让出cpu,让其他方法调先执行
3。数据镜像,允许克隆一个当前数据的镜像,并且每个镜像都有版本标记。
     然后是相关场景:
玩家a在 a服务器 与玩家b 在b服务器中交易一个武器,并且获得100金币

1,交易由玩家a发起
2,在服务器a上克隆一个玩家b的镜像。并且克隆一个a镜像
3,完成交易逻辑,玩家a获得一把武器,玩家b获得100金币,获得2玩家交易后的状态和镜像的差异数据。
4,请求玩家b的远程镜像合并服务。
5,如果4成功则合并玩家a镜像 完成交易
6,任何操作失败,或者镜像合并之前被修改,则丢弃镜像和差异数据,操作失败。

无锁关键操作:
1,修改的原子性,不管是发起者还是远程修改,仅仅一次操作。
2,数据唯一操作保证了我们操作的成功率,不会有任何别的修改来干扰写操作。
3,唯一的失败概率为在远程操作完成后,本地写入失败。返回过程中允许别的操作。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 23:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表