linux下多线程扑克游戏框架

linux下多线程扑克游戏框架

/*

*rc.c

*文件描述:

*1)提供了linux下“升级”(北方常见的一种扑克玩法)游戏的框架。

*2)库:glibc2.15;编译环境:gcc4.7.2;内核:3.8.4

* 3) 编译:gcc -pthread -DDEBUG -o rc rc.c

*作者:漂流骑士

*发布时间:2013.4.3

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define PLAYERCOUNT4

#define PLAYED_CARDS_NO 4

#define PLAYING_WAITING 10

#define BUFFER_RECV 128

#ifdef DEBUG

#define DPRINTF(s) printf s

#else

#define DPRINTF(s)

#endif

#define ERR_HANDLER(s) {perror s;exit(-1);}

typedef enum

{

STAGE_HANPAI = 0,

STAGE_CALC

}stage_t;

typedef struct barrier_hanpai_tag

{

int mailbox_hanpai;/*空闲标志。0为空闲,1为繁忙*/

pthread_mutex_t m_hanpai[2];/*m_hanpai[0]与同步信号配套的互斥量

m_hanpai[1]确保喊牌期间运行控制线程(RC线程)首先执行*/

pthread_cond_t c_hanpai_P2RC;/*喊牌期间,玩家发给运行控制线程的同步信号*/

}barrier_hanpai_t, *barrier_hanpai_p;

typedef struct barrier_calc_tag

{

int mailbox_calc;/*空闲标志。0为空闲,1为繁忙*/

pthread_mutex_t m_calc[2];/*m_calc[0]与同步信号配套的互斥量

m_calc[1]确保出牌(计算)期间运行控制线程首先执行*/

pthread_cond_t c_calc_P2RC;/*计算期间,玩家发给运行控制线程的同步信号*/

}barrier_calc_t, *barrier_calc_p;

typedef struct barrier_tag

{

int sqno;/*玩家序号*/

pthread_t player[PLAYERCOUNT];

pthread_mutex_t m_global;/*确保运行控制线程每局均能首先运行*/

pthread_mutex_t m_interplayer;/*玩家线程间的互斥*/

pthread_cond_t c_RC2P;/*喊牌、计算期间,RC线程发给玩家线程的信号*/

pthread_cond_t c_ready_P2RC;/*每局牌开始时的同步*/

struct barrier_hanpai_tag barrier_hanpai;

struct barrier_calc_tag barrier_calc;

}barrier_t, *barrier_p;

typedef void (*sighandler_t)(int);

sigset_t signal_set;

int repeatflag_hanpai = 1, repeatflag_calc = 1, quitflag = 0;

int player_hanpai_decision = 0xca;

char player_status_play = 0;

char player_status_hanpai = 0;

sigjmp_buf jmpbuf_hanpai[4];

sigjmp_buf jmpbuf_calc[4];

void hanpai(int counter, int sqno, barrier_p mybarrier)

{

char buffer[10];

/*若为第二次喊牌

linux下的扑克游戏,linux下多线程扑克游戏框架.doc相关推荐

  1. linux编写一个简单的端口扫描程序,小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2)...

    当前位置:我的异常网» Linux/Unix » 小弟我在linux下写了个简单的多线程端口扫描程序, 小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2) www. ...

  2. linux用mame玩游戏,Ubuntu下用kxmame运行精彩的街机游戏

    闲得无聊,试试在Ubuntu玩一下那些经典的街机游戏,搜了下论坛,一般是用gxmame,先看看"添加/删除"里有没有,查找"gxmame",没有,倒是有个kxm ...

  3. linux 射击 游戏,Ubuntu下安装第一人称射击游戏 Nexuiz 2.4.2(图)

    Ubuntu下安装第一人称射击游戏 Nexuiz 2.4.2(图) Nexuiz 是最流行的基于 DarkPlaces 引擎的开源第一人称射击游戏之一.经过漫长的开发旅程,在2008年05月11日,该 ...

  4. Windows 和 Linux 应用程序从上到下调用层次比较

    刚毕业的时候,做了将近一年的Window下的程序开发,主要用MFC,那是也不明白程序在操作系统角度从上到下的整个调用层次.遇到调用库函数,不明白,就查MSDN,每个月1500行代码左右,那时以为这就是 ...

  5. linux 程序定时重启tomcat,linux下实现tomcat定时自动重启

    tomcat自带的脚本中没有提供直接restart的模式,但是有start和shutdown两种模式.要实现restart模式,实际上只需要判断是否已经启动tomcat,若已经启动则限制性shutdo ...

  6. java socket windows linux,socket在windows下和linux下的区别

    windows到Linux代码移植遇到的问题 1.一些常用函数的移植http://www.vckbase.com/document/viewdoc/?id=1586 2.网络------转载& ...

  7. linux svn 启动命令行,Linux下启动、关闭SVN服务

    Linux下启动/关闭Oracle 一.Linux下启动Oracle Linux下启动Oracle分为两步: 1)启动监听: 2)启动数据库实例: 1.登录服务器,切换到oracle用户,或者以ora ...

  8. linux命令之man及ubuntu下man

    Linux man命令的使用方法(整理收集自网络) Linux提供了丰富的帮助手册,使用Linux man命令来查看一些不熟悉的命令的使用方法,还可以用来查询系统库文件中的一些函数定义和使用方法. L ...

  9. linux下杀死全部进程,linux下批量杀死进程

    ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符 ...

最新文章

  1. 如何实现点击微信内置浏览器返回按钮,返回指定页面,或者原地刷新
  2. Jenkins 流水线 获取git 分支列表_某小型公司持续集成工具 jenkins 实践
  3. 雷军玩谐音梗:称米粉为“小粽子” 因为粽子“心中有MI”
  4. rstp 转hls_海康大华RTSP转HLS直播
  5. rom lg g2 f320d android 4.4.2,LG G2(F320K/S/L/D8001/D802)官方KDZ刷机教程
  6. 群晖transmission 下载失败 权限设置 permission denied
  7. Jmeter+badboy
  8. 日志易使用系列四:日志采集 Agent 的配置
  9. 【Axure原型分享】评论元件
  10. 2000元台式电脑组装配置单2021 2000元组装电脑配置清单
  11. IDEA Unable to import maven project: See logs for details具体解决方法
  12. 阿里小蜜商家版投入测试 为商家服务扩容
  13. 史上最超级KB的10个故事~你撑到第几个才发抖
  14. algorithm——并查集
  15. UEFI 中的Gmac网卡驱动实现
  16. 袁国宝:左晖走了,留下什么?
  17. 用python打印购物小票和证书
  18. java主从服务器的配置
  19. nifi apache_Apache Nifi的工作原理-浏览数据流,不要淹没其中
  20. 北大光华本科女强人的超长综合面经

热门文章

  1. 专杀工具源码 V1.5
  2. java毕业生设计高校教材征订管理系统计算机源码+系统+mysql+调试部署+lw
  3. PVCBOT【21号】挑战者--人形机甲战士
  4. 【蓝桥杯选拔赛真题29】python堆砖块 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
  5. Zebra源码分析-SingleDataSource
  6. react中label标签关联的用法
  7. 为Jupyter Notebook添加Kernel(Win10+Ubuntu18.04)
  8. 大学计算机VBScript试题,一步一步学VBScript(5)之WSH对象四
  9. 苹果笔记本没有计算机管理员,苹果电脑忘记管理员密码怎么办_mac电脑忘记管理员密码的处理办法...
  10. Linux Maven 安装教程