![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
风云来
这个作者很懒,什么都没留下…
展开
-
游戏服务器之线程封装
线程基类。其他具体线程类型可以原创 2014-07-07 15:21:18 · 974 阅读 · 0 评论 -
volatile的原子性机制
关于volatile的说明,这是一个老生常谈的问题。volatile的定义很简单,将其理解为易变的,防止编译器对其进行优化。那么其用途一般有以下三种:1. 外部设备寄存器映射后的内存——因为外部设备寄存器可能会由于外部设备的状态变化而改变,因此映射后的内存需要注明为volatile的;2. 多线程或异步访问的全局变量;3. 嵌入式汇编——防止编译器对其优化;原创 2014-05-18 22:52:50 · 1884 阅读 · 1 评论 -
多线程之pthread_detach和 pthread_join
man pthread_detach:Either pthread_join(3) or pthread_detach() should be called for each thread that an application creates, so that system resources for the thread can be released.原创 2014-10-24 16:05:14 · 1132 阅读 · 0 评论 -
http线程池的设计与实现(c++)
http线程池的主要用途是异步处理使用无状态短连接的http请求,在传输层通信基于tcp协议和应用层基于http协议的基础上,达到c++服务器与web服务器通信的目的。设计上:(1)服务器启动时,初始化配置数量的线程(形成被动连接线程池)。每个线程会生成epoll描述符。(2)主线程生成监听socket,绑定端口。生成epoll描述符,注册监听socket,非阻塞接收(限定最大时间,如原创 2015-02-25 17:48:51 · 2628 阅读 · 0 评论 -
僵尸进程的问题
转IBm对死进程的描述:有关Defunct进程(死进程)的问题确定内容提要 本文介绍了为什么会产生defunct进程,如何确定引起defunct进程的原因,以及当需要进一步确定问题时应提供何种信息给软件供应商。 正文 1.Defunct进程的产生在AIX操作系统实施的进程结构中,每一个进程都有一个父进程。当一个进程结束时会通知它的父进程,从而该进程的父进程会收集原创 2013-12-18 12:02:04 · 2141 阅读 · 0 评论 -
进程通信linux
一、进程间通信概述进程通信有如下一些目的:A、数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间B、共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。C、通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。D、资源共享:多个进程之间共享同样的资源。为了作原创 2014-08-27 16:06:22 · 1084 阅读 · 0 评论 -
linux本地套接字
服务端:[cpp] view plaincopy//s_unix.c #include #include #include #include #define UNIX_DOMAIN "/tmp/UNIX.domain" int main(void) { socklen_t cl原创 2014-09-01 14:27:43 · 2249 阅读 · 0 评论 -
游戏服务器之无锁队列
设计上:(1)无锁队列(自定义消息队列)里含有一个消息缓存队列和消息数组,数组有读游标和写游标。消息缓存队列的使用用途是在数组满时使用的,数组的长度较大(102400),所以使用到消息缓存队列的情况不会很多,使用数组以及读写游标可以提供较好的随机访问速率。(2)消息处理和派送是在逻辑线程里(会读取消息数组并移动读游标),而自定义消息队列的写入是在网络线程中(会写入消息数组并移动写游标)。...原创 2014-07-01 16:35:12 · 1984 阅读 · 0 评论 -
一读一写无锁队列c++实现
限制一个线程读,一个线程写,不加锁的队列,使用单链表实现,测试环境:centos 5.9[root@localhost test]# cat test.cpp #include <iostream>#include <pthread.h>template<class QElmType>struct qnode{ ...原创 2013-05-19 02:46:53 · 7520 阅读 · 5 评论 -
c++的跨平台的读写锁的实现
使用宏区分win和linux下的锁的实现。头文件RWLock.h////////////////////////////////////////////////////////////////////////////读写锁//////////////////////////////////////////////////////////////////////////#i...原创 2013-04-10 03:49:38 · 2705 阅读 · 0 评论 -
游戏服务器之锁
游戏服务器常使用的的锁的实现 。运行平台linux。1、互斥锁互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入运行。class nMutex {public: friend class thread_cond;//条件变量可以操作互斥量 // 锁类型枚举 enum M...原创 2013-04-10 02:00:39 · 1811 阅读 · 0 评论 -
gcc 原子操作函数
gcc从4.1.2以后提供了__sync_*系列的内嵌函数,提供用于针对数字或布尔型变量的原子操作。1、原子操作的api函数(1)直接操作数的原子操作第一组返回更新前的值,第二组返回更新后的值type__sync_fetch_and_add(type*ptr,typevalue,...)type__sync_fetch_and_sub(type*ptr,type...原创 2013-11-15 02:49:20 · 10275 阅读 · 0 评论 -
linux 多线程的线程控制和线程通信
1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型。Linux是一种“多进程单线程”的操作系统。Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。 大家知道,进程是资源分配的单位,同一进程中的多个线程共享该进程的资源(如作为共享内存的全局变量)。Linux中所谓的“线程”只是在被创建时clone原创 2014-01-10 00:48:31 · 2095 阅读 · 0 评论 -
游戏服务器之跨平台线程的实现
一个跨windows和linux平台的线程基类的实现。需要实现的在头文件的接口如下实现的功能就是一些线程的基本功能(部分功能需要的话还需要拓展,在子类实现):例程、挂起、恢复、终止、线程句柄、线程id.不同平台也会有些差异,主要是使用上,对于线程id、互斥量、条件变量的使用。只有windows有线程句柄,windows的线程事件通知和等待是通过线程句柄,linux使用条件变量。线程原创 2014-01-06 11:31:56 · 1202 阅读 · 0 评论 -
游戏服务器之多进程架构通信
游戏服务器有时需要分多个进程来处理各种负载。进程类型有如下登陆服务器:创建账号,检验角色账号,选择和获取并返回网关信息。网关服务器:创建角色,转发消息。会有网关角色,和相关的屏信息,用于广播。场景服务器:处理场景(分线或不分线的)、副本的游戏逻辑。社会关系服务器:处理社交相关的全区的逻辑。数据库服务:存取数据。中心服务器:处理内部服务器之间的消息原创 2014-02-01 00:07:41 · 4156 阅读 · 0 评论 -
线程同步之 pthread_cond_wait 和pthread_mutex
pthread_cond_wait() 必须与pthread_mutex 配套使用。 pthread_cond_wait()函数一进入wait状态就会自动release mutex. In Thread1: pthread_mutex_lock(&m_mutex); pthread_cond_wait(&m_cond,&m_mutex);原创 2014-07-07 14:48:46 · 1345 阅读 · 0 评论 -
linux 进程创建clone、fork与vfork
首先说明Linux下的进程与线程比较相近。这么说的一个原因是它们都需要相同的数据结构来表示,即task_struct。区别在于一个有独立的用户空间,一个是共享的用户空间(如果完全没有用户空间则是内核线程,不需要)。 Linux的用户进程不能直接被创建出来,因为不存在这样的API。它只能从某个进程中复制出来,再通过exec这样的API来切换到实际想要运行的程序文件。 复制的API原创 2014-05-19 22:02:57 · 4985 阅读 · 2 评论 -
浅谈 linux 多线程编程和 windows 多线程编程的异同
linux下多线程编程和windows下的多线程编程了:首先我们讲讲为什么要采用多线程编程,其实并不是所有的程序都必须采用多线程,有些时候采用多线程,性能还没有单线程好。所以我们要搞清楚,什么时候采用多线程。采用多线程的好处如下:(1)因为多线程彼此之间采用相同的地址空间,共享大部分的数据,这样和多进程相比,代价比较节俭,因为多进程的话,启动新的进程必须分配给它独立的地转载 2013-04-11 22:27:24 · 1170 阅读 · 0 评论 -
游戏服务器之服务器之间的被动连接
服务器之间的被动连接的设计和实现,本文的是以自定义被动连接socket来体现。功能是服务器之间的数据收发的被动连接的处理。应用如:数据服务器的数据服务器对象是继承于自定义被动连接socket的,处理逻辑服务器的连接活动。设计上:启动两个线程:(1)接收连接线程增加活动会话(2)启动数据收发线程处理所有的会话上的数据,接收数据并拷贝到缓存,和处理发送队列数据发原创 2014-02-10 00:50:15 · 1130 阅读 · 0 评论 -
游戏服务器之多线程的会话管理
应用场景:游戏服务器的逻辑服务器下有逻辑网关,逻辑网关下有多个发送线程和一个接收处理线程、一个接收线程、一个监听线程。所以,接收线程和发送线程和接收处理线程、监听线程之间需要对会话的数据进行管理。监听线程会创建会话。接收处理线程需要关闭长时间不活动的会话。VOID ExecSockDataMgr::CloseSession(PRUNGATEUSERSESSI原创 2014-04-04 18:25:58 · 1654 阅读 · 0 评论 -
游戏服务器之服务器之间的主动连接
自定义客户端连接socket1、自定义客户端连接socket启动2、创建主动连接socket线程(1)性能检测和周期控制(2)自定义客户端连接socket例程(3)创建连接socket并连接(4)连接socket收发数据3、自定义客户端连接socket关闭1、自定义socket启动创建连接socket线程B原创 2014-02-10 01:24:58 · 1637 阅读 · 0 评论 -
lockfree 的队列的实现
一个高速无锁循环队列的实现。需要注意的是:(1)队列的大小(m_lMaxQueueSize)应该足够的大,避免处理不过来时,找半天找不到空位置。(2)还有一点是这种队列在push数据足够快时效率高点,不然pop时就阻塞了,改善的方式就是使用费阻塞的方式,判断几次没有就跳出去,还有这种队列也就在push数据足够快时效率高点,不然判断的次数就多了。(3)使用了原子操作的锁(4)需...原创 2013-11-15 02:26:19 · 4412 阅读 · 0 评论