linux多线程同步
hanchaoman
这个作者很懒,什么都没留下…
展开
-
linux多线程学习(三)——互斥锁线程控制
在前面的文章中提及到,一个进程中的多个线程是共享同一段资源的,由于线程对资源的竞争引出了锁。其中mutex是一种简单的加锁方法,这个互斥锁只有两种状态,那就是上锁和解锁,可以把互斥锁看作是某种意义上的全局变量。在某一时刻,只能有一个线程取得这个互斥上的锁,拥有上锁状态的线程可以对共享资源进行操作,而其他线程在该线程未解锁之前,够会被挂起,直到上锁的线程解开锁。可以这么说,互斥锁使得共享资源按序的原创 2009-11-11 15:36:00 · 1552 阅读 · 0 评论 -
进程与线程的区别联系
对于线程,进程的概念一直都是比较模糊,最近整理了一下。总结起来就是,线程是进程的一部分,进程是程序的一部分。这个说法不准确,但是可以指出期间的差别; 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一原创 2013-05-12 20:36:37 · 979 阅读 · 0 评论 -
linux多线程学习(五)---条件变量
1. 相关函数 #include pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_in原创 2009-11-11 16:07:00 · 1922 阅读 · 0 评论 -
多线程程序与fork()
多线程程序里不准使用forkUNIX上C++程序设计守则3准则3:多线程程序里不准使用fork在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的例子就是,fork出来的子进程可能会死锁.请不要,在不能把握问题的原委的情况下就在多线程程序里fork子进程.能引起什么问题呢?那看看实例吧.一执行下面的代码,在子进程的执行开始处调用doit()时,发生死锁的机率会很高.1void* doit(void*) {23 static pthread_mutex原创 2010-06-22 10:15:00 · 6316 阅读 · 2 评论 -
对于可重入、线程安全、异步信号安全几个概念的理解
可重入与异步信号安全一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误。《多线程编程指南》中定义,可以被信号控制器安全调用的函数被称为"异步信号安全"函数。因此,我认为可重入与异步信号安全是一个概念。有人将可重入函数与线程安全函数混为一谈,我认为是不正确的。这里引用CSAPP中的描述来说明一下:--------------------------------------------------CSAPP1原创 2010-06-07 14:53:00 · 1459 阅读 · 0 评论 -
Linux操作系统下的多线程编程详细解析
线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还转载 2010-05-26 15:14:00 · 1367 阅读 · 0 评论 -
LINUX 多线程互斥量和读写锁区别
线程的同步, 发生在多个线程共享相同内存的时候, 这时要保证每个线程在每个时刻看到的共享数据是一致的. 如果每个线程使用的变量都是其他线程不会使用的(read & write), 或者变量是只读的, 就不存在一致性问题. 但是, 如果两个或两个以上的线程可以read/write一个变量时, 就需要对线程进行同步, 以确保它们在访问该变量时, 不会得到无效的值, 同时也可原创 2010-05-27 17:28:00 · 6347 阅读 · 2 评论 -
linux多线程学习(二)—线程的创建和退出
在上一篇文章中对线程进行了简单的概述,它在系统中和编程的应用中,扮演的角色是不言而喻的。学习它、掌握它、吃透它是作为一个程序员的必须作为。在接下来的讲述中,所有线程的操作都是用户级的操作。在LINUX中,一般pthread线程库是一套通用的线程库,是由POSIX提出的,因此他的移植性是非常好的。 创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pt原创 2010-05-21 10:45:00 · 1203 阅读 · 0 评论 -
posix多线程函数速查
1.我的系统是否支持多线程如何知道我的系统是否支持多线程呢(POSIX标准)?有两种方法,一种方法是检查系统中的某些重要的头文件,如limits.h、unistd.h等;另外一种方法就是写一个简单的程序测试一下。由于前者比较复杂,所以一般采用后面的方法,即在程序中判断宏_POSIX_VERSION:l 如果没有定义宏_POSIX_VERSION,那么肯定不支持多线程;l原创 2010-03-15 15:57:00 · 191 阅读 · 0 评论 -
linux多线程学习(一)---线程基础
一.什么是线程 在一个程序里的多个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的一个控制序列”。 典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。 二.线程的优点(1) 通过为每种事件类型的处原创 2009-11-19 16:17:00 · 1710 阅读 · 0 评论 -
linux多线程学习(四)——信号量线程控制
在上一篇文章中,讲述了线程中互斥锁的使用,达到对共享资源互斥使用。除了使用互斥锁,信号量,也就是操作系统中所提到的PV原语,能达到互斥和同步的效果,这就是今天我们所要讲述的信号量线程控制。PV原语是对整数计数器信号量sem的操作,一次P操作可使sem减一,而一次V操作可是sem加一。进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量的值大于零或等于零的时候,该进程(或线程原创 2009-11-11 15:42:00 · 1352 阅读 · 0 评论 -
linux线程的取消(终止)
关键:pthread_cancel函数发送终止信号pthread_setcancelstate函数设置终止方式pthread_testcancel函数取消线程(另一功能是:设置取消点)1 线程取消的定义一般情况下,线程在其主体函数退出的时候会自动终止,但同时也可以因为接收到另一个线程发来的终止(取消)请求而强制终止。2 线程取消的语义线程取消转载 2014-12-30 10:32:07 · 11832 阅读 · 0 评论