多线程编程
文章平均质量分 89
voipmaker
nnn
展开
-
多线程服务器的适用场合
<br />“服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下一个请求的到来。例如 wget 不是长期运行的,httpd 是长期运行的。<br />正名<br />与前文相同,本文的“进程”指的是 fork() 系统调用的产物。“线程”指的是 pthread_create() 的产物,而且我指的 pthr原创 2010-11-30 12:00:00 · 1238 阅读 · 0 评论 -
linux多线程设计
<br />#include <pthread.h>1、创建int pthread_create( pthread_t *tid, const pthread_attr_t *attr, void *(* func) (void *), void *arg );attr: 线程属性包括:优先级、初始栈大小,是否应该成为一个守护线程。缺省设置,NULL后面是线程要执行的函数和参数成功返回 02、等待一个给定线程终止int pthread_join( pthread_t tid, void **status);原创 2010-10-25 23:04:00 · 1211 阅读 · 0 评论 -
epoll
<br />#include<iostream><br />#include<sys/socket.h><br />#include<sys/epoll.h><br />#include<netinet/in.h><br />#include<arpa/inet.h><br />#include<fcntl.h><br />#include<unistd.h><br />#include<stdio.h><br />#include<pthread.h><br /> <br />#define MAXLIN原创 2010-10-23 23:57:00 · 1023 阅读 · 0 评论 -
Use Thread Pools Correctly: Keep Tasks Short and Nonblocking
<br />What are thread pools for, and how can you use them effectively? As shown in Figure 1, thread pools are about letting the programmer express lots of pieces of independent work as a "sea" of tasks to be executed, and then running that work on a set of原创 2010-12-11 01:46:00 · 1765 阅读 · 0 评论 -
线程池
<br /> 基本想法是这样的:<br /> 1、预创建的线程通过mutex休眠在线程池中。这样,通过unlock该mutex就可以唤醒该线程了;<br /> 2、出于简单性的目标,一个线程池内的所有线程的属性都是相同的。这个属性在创建线程池可以指定;<br /> 3、一般来讲,线程池内的线程不能被取消、或者调用pthread_exit()退出。这些管理性工作是由线程池本身完成的。即,在使用线程池借出的线程时,函数返回应该只用return。<br /> 4、从原创 2010-12-11 13:41:00 · 1274 阅读 · 0 评论 -
PThread编程
<br />int pthread_create(<br /> pthread_t *tid,<br /> const pthread_attr_t *attr,<br /> void*(*start_routine)(void*),<br /> void *arg<br /> );<br />//参数tid 用于返回新创建线程的线程号;<br />//start_ro原创 2010-12-11 13:48:00 · 1190 阅读 · 0 评论 -
Linux 多线程应用中如何编写安全的信号处理函数
<br />在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为程序运行出错,而是程序逻辑需要,譬如 SIGUSR1、SIGRTMIN 等,信号在被处理后应用程序还将正常运行。在编写这类信号处理函数时,应用层面的开发人员却往往忽略了信号处理函数执行的上下文背景,没有考虑编写安全的信号处理函数的一些规则。本文首先介绍编写信号处理函数时需要考虑的一些规则;然后举例说明在多线程应用中如何构建模型让因为程序逻辑需要而产生的原创 2010-10-17 21:55:00 · 1084 阅读 · 0 评论 -
同步基元概述
<br />.NET Framework 提供了一系列同步基元来控制线程交互并避免争用条件。这可大致分为三个类别:锁定、通知和联锁操作。<br />上述类别的定义并非是绝对的:有些同步机制具有多个类别的特征;一次释放一个线程的事件从功能上来说类似于锁;任何锁的释放都可看作一个信号;而联锁操作可用于构造锁。但是,这些类别仍然是有用的。<br />记住线程同步是协作这一点非常重要。只要有一个线程避开同步机制直接访问受保护的资源,该同步机制就不是有效的。<br />本概述包含以下几节:<br />锁定<br />原创 2010-10-16 11:43:00 · 1180 阅读 · 0 评论 -
在 POSIX 线程编程中避免内存泄漏
<br /> POSIX 线程(pthread)编程定义了一套标准的 C 编程语言类型、函数和常量 — 且 pthreads 提供了一种强大的线程管理工具。要充分使用 pthreads,您要避免常见错误。一个常见的错误就是忘记联接可接合的线程,从而导致内存泄漏并增加工作量。在该篇技巧型文章中,学习 POSIX 线程基础,了解如何识别和检测线程内存泄漏,并获得避免出现这种情况的可靠建议。<br /> <br /> <br /> <br />POSIX 线程简介<br />使用线程的主要原因是要提高程序性原创 2010-10-17 21:35:00 · 1126 阅读 · 0 评论 -
POSIX thread (pthread) libraries
The POSIX thread libraries are a standards based thread API for C/C++. It allows one to spawn a new concurrent process flow. It is most effective on multi-processor or multi-core systems where the process flow can be scheduled to run on another processor t原创 2010-10-16 13:30:00 · 1905 阅读 · 0 评论 -
Pthread 与 Linux
<br />Pthread本来是一套用户级线程库, 但在Linux上实现时, 却使用了内核级线程来完成, 这样的好处是, 可以充分的提高程序的并发性, 线程也可以象以前一样调用Head这样的函数, 而不必担心会由于阻赛影响其它的线程的运行. 但这样一来, linux的线程就不是标准的了. <br /><br />下面结合Linux上的实现来谈一谈Pthread. <br /><br />一 基本概念 <br />--------- <br /><br />Pthread是一套通用的线程库, 它广泛的被各种U原创 2010-10-16 11:57:00 · 1173 阅读 · 0 评论 -
线程与线程处理
<br />操作系统使用进程将它们正在执行的不同应用程序分开。线程是操作系统分配处理器时间的基本单元,并且进程中可以有多个线程同时执行代码。每个线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的 CPU 寄存器组和堆栈。<br />.NET Framework 将操作系统进程进一步细分为由 System::AppDomain 表示的、称为应用程序域的轻量托管子进程。一个或多个托管线程(由原创 2010-10-16 11:41:00 · 1137 阅读 · 0 评论 -
引发事件
事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型 (Delegate),该类型提供函数指针的功能。委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名原创 2010-10-16 11:34:00 · 1117 阅读 · 0 评论 -
epoll机制
<br />/**<br /> * 该文件名为epoll.c<br /> *<br /> * 该测试代码是从http://blog.csdn.net/mote_li/archive/2004/12/08/209450.aspx修改来的. 只供学习使用.<br /> *<br /> * 我的测试环境AS4U3<br /> * [gan@localhost ~]$ uname -r<br /> * 2.6.9-34.EL<br /> */<br />#include<sys/types.h><br />#inc原创 2010-12-07 10:58:00 · 1380 阅读 · 1 评论 -
Debugging Programs with Multiple Threads
In some operating systems, such as HP-UX and Solaris, a single program may have more than one thread of execution. The precise semantics of threads differ from one operating system to another, but in general the threads of a single program are akin to mult原创 2010-10-17 01:08:00 · 1611 阅读 · 1 评论 -
托管线程池
<br />当多个线程可以调用单个对象的属性和方法时,对这些调用进行同步处理是非常重要的。否则,一个线程可能会中断另一个线程正在执行的任务,使该对象处于一种无效状态。其成员不受这类中断影响的类叫做线程安全类。<br />Common Language Infrastructure 提供了几种可用来同步对实例和静态成员的访问的策略:<br />同步代码区域。可以使用 Monitor 类或此类的编译器支持来仅同步需要此类的代码块,从而提高性能。<br />手动同步。可以使用 .NET Framework 类库提原创 2010-10-16 11:42:00 · 1364 阅读 · 0 评论 -
Linux 多线程 pthread
<br />1. Linux线程的发展<br />早在LINUX2.2内核中。并不存在真正意义上的线程,当时Linux中常用的线程pthread实际上是通过进程来模拟的,也就是同过fork来创建“轻”进程,并且这种轻进程的线程也有个数的限制:最多只能有4096和此类线程同时运行。<br />2.4内核消除了个数上的限制,并且允许在系统运行中动态的调整进程数的上限,当时采用的是Linux Thread 线程库,它对应的线程模型是“一对一”,而线程的管理是在内核为的函数库中实现,这种线程得到了广泛的应用。但是它原创 2010-11-30 12:35:00 · 1335 阅读 · 0 评论