![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
进程通信和线程知识总结
qq_26654257
仰泰山之高,俯江河之远,叹宇宙之无限,悲蟪蛄之春秋,上下求索,终无所得。
展开
-
互斥锁
互斥锁初始化函数原型int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutexattr)表头文件:#include mutex:互斥锁mutexattr:PTHREAD_MUTEX_INITIALIZER创建快速互斥锁PTHREAD_RECURSIVE_MUTEX_INITIALI原创 2016-11-12 23:19:47 · 259 阅读 · 0 评论 -
linux c++线程池实现 - tbsys实现详解
linux线程池 - tbsys实现详解一年前刚刚毕业入职还会写几篇博客,后来项目取消开源要求员工删除博客,写博客这件事情就荒废了。一年后,回忆一下,如果不养成写东西的习惯可能很难积累下知识,成长会慢很多。现在还是继续写吧,也可以读读其它开源代码写一写。tbsys是阿里的一份开源代码,在阿里集团广泛应用,由多隆大神创作,内部代码实现有很多精致巧妙的地方。今天学习下tbsys的线程池实现转载 2017-10-10 21:52:54 · 535 阅读 · 0 评论 -
进程的学习1
进程是一个具有一定独立功能的程序的一次运行,同时也是资源分配的最小单元进程的生命周期:创建、运行、消除进程互斥:临界资源:一次只允许一个进程访问临界区:进程中访问临界资源的那段代码进程同步:一组并发进程按一定的顺序进行的过程消息或事件:合作进程间发送调度方式:抢占式 非抢占式死锁:多个进程因竞争资源而形成一种僵局若无外力作用,这些进程都将无法执行原创 2016-10-18 18:43:09 · 143 阅读 · 0 评论 -
进程函数2
getpid函数作用:获取进程识别码,进程号函数的原型:pid_t getpid()返回值:目前进程的进程号头文件:#includegetppid获取父进程的pid号fork函数函数的作用:创建一个进程函数的原型:pid_t fork()表头文件:#include返回值:0父进程,返回值是子进程的进程号原创 2016-10-19 17:08:21 · 188 阅读 · 0 评论 -
进程间的通信(管道)
1进程间可通过管道进行通信,管道管道是半双工,即单向传输2管道分为两种,有名管道和无名管道无名管道只能用于父子管道,兄弟管道等有亲近关系的进程之间,而有名管道则都可以。3创建管道必须在创建子进程之前,也就是说pipe()必须写在fork()之前4向管道写入时是从文件尾开始的,从缓冲区的头部输出原创 2016-10-22 18:41:58 · 232 阅读 · 0 评论 -
共享内存
共享内存的步骤1创建共享内存,并打开2映射共享内存3分离共享内存4控制共享内存,删除shmget函数的作用:在内核中创建共享内存函数的原型:int shmget(key_t key,int size,intshmflg);函数的参数:key(键值 IPC——PRIVATE私有的键值) size:创建的内存大小原创 2016-10-23 19:28:02 · 226 阅读 · 0 评论 -
无名管道
pipe函数的作用:建立管道头文件:#include函数原型:int pipe(int fileds[2]);返回值:成功返回i,否则返回1,错误原因存于errno读写无名管道一般I/O函数都可用于管道从管道读写数据(1)若写端不存在,则认为到达文件尾,返回字节数为0;(2)写端存在,若请求的字节数大于PIPE_BUF,则返回管道中现有的数据字节数,如果不大原创 2016-10-24 20:33:17 · 194 阅读 · 0 评论 -
消息队列
msgsnd函数的作用:写数据到消息队列函数的原型:int msgsnd(int msgid,const void *msggp,size_t int msgflg)函数的参数:msggp 消息、结构msgsize:消息的字节数msgflg:IPC_NOWAIT(写不进去直接返回)O:知道能写进去消息为止omsgctl函数的作用:控制消息队列,可以删除消息函数的原创 2016-10-25 21:11:53 · 197 阅读 · 0 评论 -
信号量
semget函数的作用:创建信号量函数的原型:int semget(key_t key,int nsems, int semflg)函数的参数:nsems:创建信号量的数目semflg:同open一样的权限semctl函数的作用:信号量的控制:初始化,删除函数的原型:int semctl(int semid,int semnum, int cmd,union semun原创 2016-10-26 16:48:43 · 325 阅读 · 0 评论 -
有名管道
mkfifo函数作用:创建fifo文件函数的原型:int mkfifo(const char *pathname,mode_t mode);函数的参数:pathname:文件路径mode:文件权限返回值:成功返回0,失败返回-1,错误原因存在于errno中#include#include #include #define FIFO "/tmp/2"i原创 2016-10-27 13:40:31 · 253 阅读 · 0 评论 -
线程概述
1线程属于进程,是CPU调度和运行的基本单位,比进程更小。2进程不拥有系统资源,但与该进程其他进程共享资源3使用线程的原因:(1)通过将进程分解为多个顺序线程使设计简单 (2)线程比进程更轻量级 (3)易于提高性能4线程优点(1)提高程序响应速度原创 2016-11-07 22:37:58 · 177 阅读 · 0 评论 -
多线性的实现
线性的创建pthread_create函数函数的作用:创建线程表头文件:#include 函数原型:int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg)函数参数:*restric原创 2016-11-08 18:42:42 · 218 阅读 · 0 评论 -
线程和进程的选择
我们编写程序,到底是采用多线程还是多进程?这里是有区别的,采用不同的机制能够获得的效率也不一样。如何选择适合我们自己的程序的机制呢?下面是一些常见的选择的看法,不过也只是提供给大家参考参考,具体设计的时候还是要自己处理。一个程序里面的所有的线程都在同一个运行空间中执行。而一个程序的子进程则是运行在另外的执行空间中的,这里是通过调用了exec函数来实现的。同一个进程中的某个线程的故障转载 2016-11-09 22:48:40 · 224 阅读 · 0 评论 -
pthread_exit与pthread_join的区别
pthread_exit(void *ptr) 函数使线程退出,并返回一个空指针类型的值。pthread_join(pthread_t tid,void **rtval)调用此函数的进程/线程等id为tid的线程返回或被终止,并从它那里获得返回值。注意,退出函数返回的是一个空指针类型,接受函数也必须用一个指针来接收。但是函数给出的参数是接收指针的地址,即,接收到的指针值写入给出的地址处的指原创 2016-11-10 21:04:27 · 1144 阅读 · 0 评论 -
学习Qt过程中的一些想法
最近在看《Qt Creator快速入门》 一书,以前也用过Qt,但就像半路出家的和尚,很多部件并不知道作用也没用过,有时为实现某种效果遇到困难时去百度,即使实现了往往知其然而不知其所以然。所以才准备看这本书,看了也收获颇丰。总结一下我今天的一些感想,也是之前不太理解的地方。(1)以前经常实现自己的某个窗口或部件时,都会写自己的类,当然框架它会自己生成。例(1)class MyLin原创 2017-12-02 01:58:04 · 309 阅读 · 0 评论