
POSIX 线程系列
文章平均质量分 86
voipmaker
nnn
展开
-
Linux 线程实现机制分析
<br />自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性、效率。本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的。<br /> <br /> <br /> <br />一.基础知识:线程和进程<br />按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的原创 2010-10-17 22:44:00 · 1704 阅读 · 1 评论 -
Linux线程同步之读写锁
<br />1. 特性: 一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁 . 正是因为这个特性, 当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞. 当读写锁在读加锁状态时, 所有试图以读模式对它进行加锁的线<br />1. 特性: <br /> 一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁. 正是因为这个特性, <br />当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁原创 2011-02-13 20:43:00 · 1712 阅读 · 0 评论 -
struct timeval 和 struct timespec
<br />timeval DESCRIPTION <br /> The functions gettimeofday and settimeofday can get and set the time as <br /> well as a timezone. The tv argument is a timeval struct, as specified in <sys/time.h>: <br /><br /> struct timeval { <br /> tim原创 2011-02-13 20:40:00 · 15937 阅读 · 0 评论 -
Posix线程编程指南(5)
<br />在Posix线程规范中还有几个辅助函数难以归类,暂且称其为杂项函数,主要包括pthread_self()、pthread_equal()和pthread_once()三个,另外还有一个LinuxThreads非可移植性扩展函数pthread_kill_other_threads_np()。本文就介绍这几个函数的定义和使用。<br />获得本线程ID<br />pthread_t pthread_self(void)<br />本函数返回本线程的标识符。<br />在LinuxThreads中,每原创 2010-10-18 00:03:00 · 1375 阅读 · 0 评论 -
Posix线程编程指南(4)
<br />线程终止方式<br />一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。<br />回页首<br />线程终止时的清理<br />不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占原创 2010-10-18 00:03:00 · 982 阅读 · 0 评论 -
Posix线程编程指南(3)
<br />互斥锁<br />尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的mutex函数。<br />1. 创建和销毁<br />有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZ原创 2010-10-18 00:02:00 · 1230 阅读 · 0 评论 -
Posix线程编程指南(2)
<br />概念及作用<br />在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由Posix线程库维护,称为线程私有数据(Thread-specific Data,或TSD)。<br />回原创 2010-10-18 00:01:00 · 924 阅读 · 0 评论 -
Posix线程编程指南(1)
<br />这是一个关于Posix线程编程的专栏。作者在阐明概念的基础上,将向您详细讲述Posix线程库API。本文是第一篇将向您讲述线程的创建与取消。<br /> 标记本文!<br /><br />发布日期: 2001 年 10 月 01 日 <br />级别: 初级 <br />建议: 0 (添加评论) 平均分 (共 0 个评分 )<br /> <br />线程创建<br />1.1 线程与进程<br />相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈原创 2010-10-18 00:00:00 · 1067 阅读 · 0 评论 -
通用线程:POSIX 线程详解,第 3 部分
<br />条件变量详解<br />在 上一篇文章结束时,我描述了一个比较特殊的难题:如果线程正在等待某个特定条件发生,它应该如何处理这种情况?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。解决这个问题的最佳方法是使用 pthread_cond_wait() 调用来等待特殊条件发生。 <br />了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线程信号发送系统的核心,也是最难以理解的部分。<原创 2010-10-17 23:59:00 · 1107 阅读 · 0 评论 -
通用线程:POSIX 线程详解,第 2部分
<br />互斥我吧! 在 前一篇文章中 ,谈到了会导致异常结果的线程代码。两个线程分别对同一个全局变量进行了二十次加一。变量的值最后应该是 40,但最终值却是 21。这是怎么回事呢?因为一个线程不停地“取消”了另一个线程执行的加一操作,所以产生这个问题。现在让我们来查看改正后的代码,它使用 互斥对象(mutex)来解决该问题: thread3.c #include #include #include #include int myglobal; pthread_mutex_t mymutex=PTHREA原创 2010-10-17 23:58:00 · 1215 阅读 · 0 评论 -
Linux 线程库性能测试与分析
<br />简介: NPTL 成为 glibc "正选"线程库后,它的性能如何受到很多人的关注。本文就针对NPTL 与 LinuxThreads 的性能比较,以及超线程、内核可抢占等特性对线程性能的影响进行了全面评测。<br /> <br /> <br />一、 前言<br />在 Linux 2.6.x 内核中,调度性能的改进是其中最引人注目的一部分[1]。NPTL(Native Posix Thread Library)[2]使用内核的新特性重写了 Linux 的线程库,取代历史悠久而备受争议的 Lin原创 2010-10-17 23:34:00 · 1670 阅读 · 0 评论 -
线程同步
2.线程同步POSIX支持用于短期锁定的互斥锁以及可以等待无限期限的条件变量。在线程化程序中进行信号处理格外复杂,但是用专用线程来取代信号处理程序,可以降低其复杂性。学习目标:互斥锁、条件变量、读--写锁、经典同步问题、带信号的线程 2.1POSIX同步函数描 述 POSIX 函数 互斥锁pthread_mutex_t pthread_mutex_destro原创 2011-02-13 19:59:00 · 1545 阅读 · 0 评论