`
javasee
  • 浏览: 924696 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一种linux上的高效同步通信算法

阅读更多

在linux网络编程中,经常要有网络函数的同步操作。比如,向一台服务器发送一个报文,然后等待回应返回,如果规定时间内没有回应,直接超时返回。有很多种处理办法。这里给出一种方式,只是一个思路,供大家讨论。,欢迎广大技术高手给与指点,谢谢大家!

定义:

函数名称为;packetProc(void);

算法原理:

首先建一个长度为100的链表。对应建立一个长度为100的数组。多线程调用packetProc,首先到链表头重找有没有可以利用的资源(在表头直接提取),找到了id为0的头节点,将这个节点对应的指针移到数组的第一个节点里。
开始使用hash[0],发送报文,然后等待返回。返回以后,将此数组节点中的链表节点插入到链表的尾部。完成一个操作,如果超时,也将此节点的指针返还给链表。

链表在多线程调用时会表现为长度不断的变化,极限情况下,可以为0,这时,函数直接返回失败,表示当前没有资源可用。链表的初始长度一定要与数组的长度一样,其实就是代表了每个可用的数组资源。

该算法的好处是,不会进行任何申请内存操作,不会对链表进行爬表操作。全部是简单的比较和指针操作。

算法实现:

PLISTHEAD list_head;
PLISTTAIL list_tail;
HASHNODE COMMHASH[LIST_MAX_LEN];

static pthread_mutex_t hashlist = PTHREAD_MUTEX_INITIALIZER;

int createList()
{
list_head = (PLISTHEAD)malloc(sizeof(LISTHEAD));
list_tail = (PLISTTAIL)malloc(sizeof(LISTTAIL));

PLISTNODE firnode = (PLISTNODE)malloc(sizeof(LISTNODE));
if(!firnode) return -1;

firnode->hashkey = 0;
list_head->prio =firnode;
list_tail->prio =firnode;
firnode->next = NULL;

int index = 0;
for (index = 1;index<LIST_MAX_LEN;index++)
{
PLISTNODE nextnode = (PLISTNODE)malloc(sizeof(LISTNODE));
if(!nextnode) return -1;
nextnode->hashkey = index;
list_tail->prio->next = nextnode;
list_tail->prio = nextnode;
}

pthread_mutex_init(&hashlist,NULL);

return 0x0;
}

int getHashKey()
{
if (list_head->prio->hashkey == list_tail->prio->hashkey)
return -1;
int hashkey = list_head->prio->hashkey;
COMMHASH[hashkey].prio = list_head->prio;
list_head->prio = list_head->prio->next;

return hashkey;
}

int setHashKey(int hashkey)
{
pthread_mutex_lock(&hashlist);
list_tail->prio->next = COMMHASH[hashkey].prio;
list_tail->prio = COMMHASH[hashkey].prio;
COMMHASH[hashkey].prio = NULL;
COMMHASH[hashkey].flag = NULL;
COMMHASH[hashkey].random = NULL;
memset(COMMHASH[hashkey].buffer,0x0,2048);
pthread_mutex_unlock(&hashlist);

return 0x0;
}

奥运门票系统瘫痪,再显数据库软肋 http://blog.csdn.net/netchecking/archive/2007/10/31/1858888.aspx

分享到:
评论

相关推荐

    一种并行计算通信优化策略

    为了解决在ABEEMσπ模型电荷分布计算中,基于Cholesky分解并行算法在通信过程中不断增长引起的通信开销和同步开销问题,采用linux并行计算集群系统层通信优化方法,设计并实现了系统层零拷贝通讯优化方法,以及可卸载的...

    深入理解Linux内核(第三版) (英文版) Understanding the Linux Kernel

     本书将使你熟悉Linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使Linux产生最佳性能,你还会看到,Linux 在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解linux内核(中文).pdf

    本书将使读者熟悉Linux所有的内在工作机制,但本书不仅仅是一种学术训练,读者还将知道什么样的条件使Linux产生最好的性能,以及Linux在各种环境下对进程调度、文件访问及内存管理期间提出的快速响应要求如何得以...

    深入理解linux内核中文第三版(高清有目录)

     本书将使你熟悉Linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使Linux产生最佳性能,你还会看到,Linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    边干边学——LINUX内核指导

    8. 2 Linux中几种同步机制的实现 8. 3 设计我们自己的同步机制 第9章 进程调度 9. 1 进程调度简介 9. 2 进程调度的策略与算法 9. 3 进程调度的实现 9. 4 改进进程调度算法的实现 第10章 设备驱动 lo. 1 Linux下驱动...

    深入理解Linux内核 第三版 中文高清完整pdf版.part3.rar

     本书将使你熟悉linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使linux产生最佳性能,你还会看到,linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解Linux内核 第三版 中文高清完整pdf版.part5.rar

     本书将使你熟悉linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使linux产生最佳性能,你还会看到,linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解Linux内核 第三版 中文高清完整pdf版.part6.rar

     本书将使你熟悉linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使linux产生最佳性能,你还会看到,linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解Linux内核 第三版 中文高清完整pdf版.part1.rar

     本书将使你熟悉linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使linux产生最佳性能,你还会看到,linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解Linux内核 第三版 中文高清完整pdf版.part2.rar

     本书将使你熟悉linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使linux产生最佳性能,你还会看到,linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解Linux内核 第三版 中文高清完整pdf版.part4.rar

     本书将使你熟悉linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使linux产生最佳性能,你还会看到,linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解Linux内核

     本书将使你熟悉Linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使Linux产生最佳性能,你还会看到,Linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    《计算机操作系统》期末复习指导

    操作系统(Operating System,OS),是一种软件,属于系统软件; 1、科普的观点 操作系统是计算机系统的管理和控制中心,它依照设计者制定的各种调度策略组织和管理计算机系统资源,使之能高效地运行。 2、功能...

    操作系统重点

     中断是指CPU对系统发生的某个事件做出的一种反应,它使CPU暂停正在执行的程序,保留现场后自动执行相应的处理程序,处理该事件后,如被中断进程的优先级最高,则返回断点继续执行被“打断”的程序。 第4章 存储...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    深入理解内核.part1(共3part)

     本书将使你熟悉Linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使Linux产生最佳性能,你还会看到,Linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解内核.part3(共3part)

     本书将使你熟悉Linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使Linux产生最佳性能,你还会看到,Linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    深入理解内核.part2.rar(共3part)

     本书将使你熟悉Linux所有的内在工作机理,但本书不仅仅是一种学术演练。你将了解到什么条件会促使Linux产生最佳性能,你还会看到,Linux在各种环境下如何满足进程调度、文件访问及内存管理期间系统提出的快速响应...

    JAVA上百实例源码以及开源项目

    (1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,...

Global site tag (gtag.js) - Google Analytics