#include "type.h"
#include <pthread.h>
#include <list>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <unistd.h>
#include "ThreadMutex.h"
using namespace std;
typedef struct tagWorkInfo
{
tagWorkInfo()
{
m_nIndex = 0;
m_strInfo.clear();
}
int m_nIndex;
string m_strInfo;
}WorkInfo, *LPWorkInfo;
CCrtSession g_crtPrint;
CCrtSession g_crtWork;
list<WorkInfo> g_lsWork;
void AddWork(const WorkInfo& info);
BOOL GetWork(WorkInfo& info);
void Print(const WorkInfo& info);
void Print(const char* lpszInfo);
void* AddTaskProc(void* pVoid);
void* DoTaskProc(void* pVoid);
int main()
{
pthread_t th1;
pthread_t th2;
void* pRet = NULL;
//创建生产者和消费者线程
pthread_create(&th1, NULL, &AddTaskProc, NULL);
pthread_create(&th2, NULL, &DoTaskProc, NULL);
//等待两个线程结束
pthread_join(th1, &pRet);
pthread_join(th2, &pRet);
return 0;
}
void Print(const WorkInfo& info)
{
CThreadMutex mutex(g_crtPrint.GetMutex());
string strPrint;
char szIndex[20] = {0};
//itoa(info.m_nIndex, szIndex, 10);
sprintf(szIndex, "index:%d\t info:", info.m_nIndex);
strPrint = szIndex;
strPrint += info.m_strInfo;
printf("%s\n", strPrint.c_str());
}
void Print(const char* lpszInfo)
{
CThreadMutex mutex(g_crtPrint.GetMutex());
if (NULL == lpszInfo)
{
return;
}
printf("%s\n", lpszInfo);
}
void AddWork(const WorkInfo& info)
{
CThreadMutex mutex(g_crtWork.GetMutex());
g_lsWork.push_back(info);
}
BOOL GetWork(WorkInfo& info)
{
CThreadMutex mutex(g_crtWork.GetMutex());
if (g_lsWork.size() <= 0)
{
return FALSE;
}
list<WorkInfo>::iterator it = g_lsWork.begin();
info = *it;
g_lsWork.erase(it);
return TRUE;
}
void* AddTaskProc(void* pVoid)
{
printf("start AddTaskProc work....\n");
int i = 0;
while (TRUE)
{
WorkInfo info;
info.m_nIndex = i++;
info.m_strInfo = "test info";
AddWork(info);
Print("push new work into list");
}
return NULL;
}
void* DoTaskProc(void* pVoid)
{
printf("start DoTaskProc work....\n");
while (TRUE)
{
WorkInfo info;
if (GetWork(info))
{
Print(info);
Print("get new work from list");
}
else
{
Print("list is empty.. sleep 1 second!");
sleep(1);
}
}
return NULL;
}
分享到:
相关推荐
【基于主动队列管理的Linux并发服务器模型及负载均衡算法的研究】 在计算机网络领域,随着互联网用户数量和网络流量的快速增长,对网络服务器的可用性和性能提出了更高的要求。特别是当网络数据流无法在多台服务器...
LINUX虚拟服务器集群模型是一种高效且灵活的解决方案,用于应对日益增长的互联网服务需求。该模型通过将多台物理服务器整合成一个逻辑上的单一服务器,提高了系统的可伸缩性和高可用性。集群中的每一台服务器(Real-...
面向多核多任务场景的Linux任务调度算法设计 Linux操作系统中,任务调度算法是影响系统性能的关键组件之一。在多核多任务场景下,Linux任务调度算法面临着实时响应不足的问题。本文提出了基于GAS模型的改进任务调度...
并发是指多个任务在一段时间内交替执行,而并行是多个任务在同一时刻执行。Linux通过多进程、多线程实现并发,并利用多核CPU支持并行。线程间的同步与互斥(如信号量、锁、条件变量)是防止数据竞争的重要手段。 5...
Linux设备模型是Linux内核中用于管理和抽象硬件设备的一种机制,它使得Linux能够支持各种各样的硬件设备,这是Linux内核的一个显著特点。在Linux内核的开发中,由于硬件的多样性和复杂性,导致了内核代码的庞大和...
总的来说,《Linux高性能服务器编程》的随书代码涵盖了从基础的网络编程到高级的并发模型、内存管理和性能优化等多个方面,是学习和实践Linux服务器开发的宝贵资源。通过深入研究这些代码,读者不仅可以提升自己的...
理解并应用这种模型,开发者可以创建出更加高效且适应性强的Linux系统,尤其在处理大量并发任务和实时需求的环境中,这种模型能提供更优秀的性能和响应速度。同时,消息驱动机制也有助于简化并发编程的复杂性,提高...
7. **事件驱动编程**:Linux下的事件库如libevent和libev,提供了基于epoll的事件驱动编程模型,适用于处理大量的并发连接。 8. **并发模型**:除了多线程,还有其他并发模型,如用户空间线程(如NPTL)、协程和...
6. **信号与定时器**:信号是Linux系统中进程间通信的一种方式,而定时器则可以用来调度任务或处理超时事件。正确使用它们可以提升服务器的响应性和可靠性。 7. **错误处理和调试**:良好的错误处理机制是保证...
Linux集群服务器是通过多台物理服务器协同工作,形成一个逻辑上的单一系统,以提高服务的可用性和处理能力。这种架构的关键在于负载均衡,它能确保服务器之间的任务分配均匀,避免单点故障,并提升整体性能。文中...
在Linux中,这可以通过多线程、多进程或者事件驱动(如epoll)模型来实现。springsnail可能采用了这些技术之一或组合,以提高服务的并发能力。 2. **负载均衡**:springsnail作为一个负载均衡器,其主要任务是将...
在深入理解Linux设备模型之前,我们首先要明白,设备驱动是操作系统与硬件设备之间的桥梁,它允许操作系统控制硬件并执行特定的任务。 Linux设备模型的主要目标是提供一种有序、结构化的机制来组织和管理系统的硬件...
这个Web服务器的实现是基于Linux内核提供的异步I/O模型,Epoll,以及线程池策略,以优化系统资源的使用和提高并发性能。 首先,让我们理解Epoll(Event Poll)是什么。Epoll是Linux内核提供的一种I/O多路复用技术,...
Linux提供了线程(pthread)库,支持创建和管理线程,实现任务的并行处理,提高系统效率。理解线程间的同步和通信机制(如互斥锁、条件变量、信号量等)至关重要。 2. **网络编程**:包括套接字编程,涉及TCP/IP...
【Linux下一种多核网络服务器模型设计与实现】 在Linux操作系统中,传统的网络服务器程序在高负载情况下往往无法充分利用多核服务器的硬件资源。这个问题主要源于缺乏高效的服务器编程解决方案。为了解决这个问题,...
在Linux(Ubuntu)环境下,利用Qt、Open3D和Assimp构建一个3D模型加载与显示的应用是一项技术性较强的任务。下面将详细讲解这个过程涉及的关键知识点。 首先,**Qt** 是一个跨平台的C++图形用户界面应用程序开发...
由于其高可用性、可扩展性和成本效益,Linux集群被广泛用于关键任务服务,如数据中心、云计算平台和大数据处理。然而,随着业务的复杂性和数据量的增长,如何确保集群系统的稳定运行和快速恢复成为了一个重大挑战。...
综上所述,基于Linux的消息驱动Socket模型通过引入消息机制和面向对象的设计,克服了传统Socket模型的一些局限性,提高了网络编程的效率和易用性,特别是在处理大量并发连接和复杂网络服务场景下,具有显著优势。...
【基于Kickstart的Linux网络安装新模型】 在Linux操作系统领域,网络安装是一种高效且节省资源的方法,尤其在大规模部署环境中。Kickstart技术是Red Hat Linux和CentOS等Linux发行版中用于自动化安装的重要工具,它...
Linux系统管理与服务是IT行业中不可或缺的基础技能,尤其在服务器运维和云计算领域中扮演着重要角色。本章节将深入探讨Linux系统的基本管理、软件安装、用户与权限控制、磁盘和文件系统管理、任务调度与故障排查、...