博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asynDBCenter(不断跟新)
阅读量:7047 次
发布时间:2019-06-28

本文共 1864 字,大约阅读时间需要 6 分钟。

GameServer以前访问DBcenter时同步的,这样服务器都要等待DBcenter返回结果,经理在DBcenter和GameServer之间加了一个asynDBCenter,就实现了异步,感觉还是很复杂,当然经理就20分钟搞定的事,主要函数:

bool asynDBCenter::get_front_and_pop(CmdPkt& pkt){    if(m_queueCmdPkt.empty())        return false;    {        std::unique_lock
lock(m_cmd_mtx); pkt = m_queueCmdPkt.front(); m_queueCmdPkt.pop(); } return true;}void asynDBCenter::push_cmd(CmdPkt pkt){ { std::unique_lock
cond_lock(m_cond_mtx);//外层就是对应下面的wait操作,这样就实现了线程同步,当有数据时就通知,免得搞个循环判断 { std::unique_lock
cmd_lock(m_cmd_mtx); m_queueCmdPkt.push(pkt); } } m_cond.notify_one();//通知threadLoop线程工作}void asynDBCenter::push_hr(HrPkt pkt){ std::unique_lock
hr_lock(m_hr_mtx); m_queueHrPkt.push(pkt);}//------------------------------------------------------------------------------------------------------------------void asynDBCenter::drive(){ HrPkt pkt; for (;;) { if(!m_queueHrPkt.size()) break ; { std::unique_lock
hr_lock(m_hr_mtx); pkt = m_queueHrPkt.front(); m_queueHrPkt.pop(); } pkt.process(pkt.on_process, pkt.hr.c_str()); }}void asynDBCenter::threadLoop(){ while(1) { CmdPkt pkt; if(get_front_and_pop(pkt))//上了把cmd包的锁,保护包,获取请求cmd包 { pkt.process(pkt.on_process, pkt.json.c_str());//根据cmd请求,访问数据库 continue; } {
//条件等待 std::unique_lock
cond_lock(m_cond_mtx); m_cond.wait(cond_lock);//有通知时就解锁 } }}

这里面只要是两个线程共享的变量就需要加锁,也许不加锁,但时间长的话都可能报错。

std::unique_lock
cond_lock(m_cond_mtx);m_cond.wait(cond_lock); 这个是线程同步的东西,等待其他线程有数据了调用Notify_one就可以唤醒了,wait在阻塞是解锁,在唤醒时锁住,这样都是为了只有一个线程访问公共变量,内部的各种包都需要同步
 

转载地址:http://jbzol.baihongyu.com/

你可能感兴趣的文章
如何实现Web聊天
查看>>
使用CLion
查看>>
Tomcat下JSP、Servlet和JavaBean环境的配置
查看>>
给phpcms v9加入一个主题radio无线电button,它可反复使用,以创建不同的专题部分内容编辑器,添加一个主题来定义自己的领域...
查看>>
UVa 514 Rails(经典栈)
查看>>
如何使用 RMAN 异构恢复一些表空间
查看>>
java中如何将byte[]里面的数据转换成16进制字符串
查看>>
Axis2 -POJO
查看>>
Java Date API demo
查看>>
[leetcode] Combination Sum and Combination SumII
查看>>
(二)WebRTC手记之框架与接口
查看>>
hbase集群 常用维护命令
查看>>
deepinmind(转)
查看>>
滴滴顺风车设计总结(原创文章)
查看>>
android 10 事件
查看>>
练习10.9-2
查看>>
变化的区间树状数组,单点查询
查看>>
lastIndexOf方法——获取字符最后的索引
查看>>
一种文件捆绑型病毒研究
查看>>
二进制中1的个数
查看>>