在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
分享到:
相关推荐
Linux采用的是一种基于优先级的简单调度算法,确保系统能够有效地在多个任务之间切换。内存管理则负责管理和分配内存资源,包括共享内存机制,允许进程间通过共享内存区域进行通信。 进程间通信是Linux内核中实现多...
【MPI Allgather算法详解及其在万亿次机群系统上的实现】 MPI(Message Passing Interface)是分布式内存并行计算中常用的一...同时,文中提出的平均逻辑通信距离的概念为评估和改进其他集体通信算法提供了新的思路。
由Eisenburg和McGuire提出,这是一种优化的软件互斥算法,它减少了进程在临界区外的等待时间。该算法引入了“请求”和“释放”的概念,允许进程在不竞争的情况下快速离开临界区。在Linux中,可以通过条件变量...
MPI 由一组库函数组成,在 Fortran 或 C 的基础上扩展为一种并行程序设计语言。 3. MPI 的组成 MPI 由一组库函数组成,提供了应用程序的编程接口,方便 Fortran77/90 或 C/C++ 等编程语言直接对这些库例程或函数...
首先,C++是一种通用的、面向对象的编程语言,具有高效、灵活的特点,广泛应用于系统软件、应用软件、游戏开发等领域。深入理解C++的关键在于掌握其内存管理(包括堆栈和堆)、面向对象特性(如封装、继承和多态)、...
总的来说,ACE为Linux环境下的系统开发提供了一种强大的工具,它允许开发者构建出既安全又高效的通信平台,尤其适合于大型网络管理系统的需求。通过对ACE的深入理解和有效利用,开发者能够快速开发出符合需求的、...
PTP(Precision Time Protocol,精确时间协议)是一种用于网络设备之间进行高精度时间同步的协议。在Linux系统中,PTP被广泛应用于各种需要精确时间同步的场景,如数据中心、金融交易、通信网络等。本资源包含PTP...
在Linux环境下,实现SPMD的一个常见框架是PVM(Parallel Virtual Machine),这是一种允许不同计算机上的进程协同工作并进行并行计算的软件系统。PVM提供了主从模式和无主机模式两种编程模式。 1. 主从模式(Master...
总的来说,这篇论文为嵌入式Linux系统开发人员提供了一种实现IEEE 1588时间同步的专业指导,有助于他们在设计和开发过程中解决高精度时间同步问题。通过理解并应用这些技术,开发者可以构建更加准确和可靠的实时系统...
在Linux系统中进行网络通信,TCP(Transmission Control Protocol)是一种常用且可靠的传输协议。本教程主要探讨如何在Linux环境下利用TCP进行网络编程,通过提供的"TCP.zip_DEMO_LINUX TCP _linux 网络通信_linux ...
Linux作为一种广泛使用的多任务操作系统,其进程间通信(Inter-Process Communication, IPC)机制是保证系统稳定运行的关键。在RoboCup仿真领域,团队中的智能体(Agent)往往需要通过复杂的通信方式与其他软件模块(如...
System V信号量是一种进程间通信(IPC)机制,用于协调多个进程对共享资源的访问。它由一组整数值组成,代表了特定资源的可用数量。每个信号量都有一个关联的操作集,包括wait()(减操作)和signal()(加操作),...
Linux作为一种开放源代码的操作系统,被广泛应用于各种嵌入式设备和服务器,因此,实现在Linux上的IEEE1588协议具有很大的实际意义。 文章首先介绍了PTP协议的基本结构,包括主时钟(Master Clock)和从时钟(Slave...
总的来说,Linux内核是一个庞大而复杂的系统,它的每一部分都是为了提供高效、可靠的服务。通过深入学习和研究,不仅可以提升个人的技术能力,也能更好地利用Linux平台进行各种软件开发和系统优化工作。这份修正版v...
在这个项目中,作者可能使用了其中的一种或多种来确保数据的高效传输和同步。 2. **网络编程**:聊天系统通常基于TCP/IP协议栈工作,因此需要对Socket编程有深入理解。开发者需要创建服务器端的监听socket,接受...
本文介绍了一种基于嵌入式 Linux 的 RS485 通信协议设计方案,该方案充分利用了 RS485 总线的特点,结合嵌入式 Linux 的优势,实现了高效可靠的通信功能。通过对物理层、数据链路层和应用层的详细设计,不仅提高了...
信号是Linux内核中用于进程间通信的一种机制,它允许进程响应外部事件或错误条件。书中详细阐述了信号的发送与接收机制,以及它们在进程控制中的应用。此外,中断处理是操作系统与硬件交互的关键,书中对Linux内核...
"专注于Linux内核中的SLAB分配器,这是一种高效的内存分配策略,用于快速分配和释放小块内存。 "27-瞧一瞧Linux:Linux如何实现进程与进程调度-"章节深入解析了Linux的进程模型和调度策略,包括进程的创建、通信和...
1. **优化同步算法**:可能采用了更高效的文件差异检测算法,减少不必要的数据传输。 2. **并发处理**:利用多线程或异步I/O技术,同时处理多个文件的同步,提高整体速度。 3. **错误处理与恢复**:当传输过程中出现...