Linux多线程
清风吹过心悠哉
作为平凡的人,通过自己的努力可以做出不平凡的事情。
展开
-
二、Linux下线程的创建
Ⅳ、线程相关函数(一)线程的创建1.线程的创建函数pthread_create函数函数简介 pthread_create是UNIX环境创建线程函数头文件 #include<pthread.h>函数声明 int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_att...原创 2019-04-16 14:54:49 · 5026 阅读 · 0 评论 -
十二、Linux下线程的同步—条件变量读者与写者问题
一、 案例写者读者案例,线程对共享资源写,写完成后读者继续读,当读取完成后,在通知写者继续写,依次循环。存在以下几种情况:1 个写者,1 个读者1 个写者,多个读者多个写者,多个读者1. 案例1——一个写者,一个读者。include<stdio.h>#include<stdlib.h>#include<string.h>#include...原创 2019-06-12 10:23:07 · 275 阅读 · 2 评论 -
十三、Linux下线程的信号量
信号量相关功能一、信号量的概念1.线程的信号量是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。但如果是普通变量,来自同一程序中不同线程的冲突操作所导致的结果将是不确定的。信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。信号量是用来调协线程对共享资源的访问的。2.最简单的信号量...原创 2019-06-17 15:48:31 · 282 阅读 · 0 评论 -
十一、Linux下线程的同步—条件变量
一、条件变量的概念1. 条件变量基本概念条件变量是线程同步的一种手段。条件变量用来自动阻塞一个线程,直到条件(predicate)满足被触发为止。通常情况下条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个或者多个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"信号。条件变量是利用...原创 2019-06-05 17:07:33 · 149 阅读 · 0 评论 -
十、Linux下线程的读写锁
一、读写锁介绍1. 读写锁的基本概念读写锁是从互斥锁中发展下来的,读写锁将访问中的读操作和写操作区分开来对待,把对资源的共享者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。在某些读数据比改数据频繁的应用中,读写锁将会比互斥锁表现出很大的优越性。2. 读写锁的状态读写锁与互斥量类似。 但读写锁有更高的并行性,其特性为:写独占,读共享。读写锁有三种状态,读模...原创 2019-05-28 14:07:01 · 198 阅读 · 0 评论 -
九、Linux下线程互斥锁类型及属性
一、互斥锁的创建和销毁pthread_mutexattr_t是互斥锁属性的数据类型,表示互斥锁的一些属性相关的信息。使用 pthread_mutexattr_init 可以将与互斥锁对象相关联的属性初始化为其缺省值。在执行过程中,线程系统会为每个属性对象分配存储空间。#inlcude<pthread.h>//初始化互斥锁属性pthread_mutexattr_init(pth...原创 2019-05-27 18:22:41 · 837 阅读 · 0 评论 -
八、Linux下线程的互斥
一、线程的互斥锁为什么使用线程锁在多线程应用程序中,当多个线程共享相同的内存时,如同时访问一个变量时,需要确保每个线程看到一致的数据视图,即保证所有线程对数据的修改是一致的。如下两种情况不存在不一致的问题:每个线程使用的变量都是其他线程不会读取和修改的变量是只读的当一个线程在修改变量的值时,其他线程在读取这个变量时可能会得到一个不一致的值。一个典型的例子是,在一个多线程程序中,两...原创 2019-05-15 11:47:02 · 147 阅读 · 0 评论 -
七、Linux下线程的同步与互斥基本概念
一、线程的同步与互斥基本概念(1) 线程的互斥多个线程之间有共享资源(shared resource)时会出现互斥现象。线程互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。假设有若干线程共享某个变量,而且都对变量有修改。如果它们之间不考虑相互协调工作,就会产生混乱。比如,线程A和B共用变量x,都对x执行增1操作。由...原创 2019-05-15 09:56:17 · 179 阅读 · 0 评论 -
六、Linux下线程属性初始化、销毁、设置和获得分离属性
一、线程的属性线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。a、初始化一个线程对象的属性int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0...原创 2019-05-06 18:24:22 · 410 阅读 · 0 评论 -
五、Linux下进程与线程的比较
一、进程与线程启动方式比较进程线程描述fork()pthread_creat()创建新的控制流return/exit()/_exit()return/pthread_exit()从现有的控制流退出wait()pthread_join()从控制流得出退出状态atexit()pthread_clean_push()/pthread_clean_p...原创 2019-05-05 11:48:07 · 203 阅读 · 0 评论 -
四、Linux下线程的清理函数
文章目录线程的清理函数1. 清理函数的使用线程的清理函数1. 清理函数的使用不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己 所占用的资源,特别是锁资源,就是一个必须考虑解决的问题。最经常出现的情形是资源独占锁的使用:线程为了访问临界共享资源而为其加上锁,但在访问过程中该线程被外界取消,或者发生了中断,...原创 2019-04-19 14:57:57 · 676 阅读 · 1 评论 -
一、Linux下线程的基本概念
Linux下的线程的概念#线程的概念##线程的概念##线程的特点原创 2019-04-15 10:55:26 · 204 阅读 · 0 评论 -
三、Linux下线程的终止
文章目录线程的终止(一)线程终止的三种方式主动方式1.线程的执行函数调用return语句2.调用pthread_exit(void *retval)被动方式3.pthread_cancel(pthread_t tid)(二)pthread_ join()函数详解(三)线程回收线程的终止(一)线程终止的三种方式主动方式1.线程的执行函数调用return语句从线程主函数中return返回。这...原创 2019-04-17 16:33:20 · 233 阅读 · 0 评论 -
十四、Linux下线程的死锁
一、死锁的概念一般情况下,如果同一个线程先后两次调用lock,在第一次调用时,由于锁已经被占,该线程会挂起等待别的线程释放锁,然而锁正是被自己占着的,该线程又被挂起,没有机会释放锁,因此,就永远处于挂起等待状态了,这叫做死锁(Deadlock)。另种典型的死锁情形是这样:线程A获得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用...原创 2019-06-18 15:40:29 · 242 阅读 · 0 评论