01 2019 档案
摘要:50.1 共享内存 50.1.1 共享内存的概念 共享内存区域是被多个进程共享的一部分物理内存 多个进程都可把该共享内存映射到自己的虚拟内存空间。所有用户空间的进程若要操作共享内存,都要将其映射到自己虚拟内存空间中,通过映射的虚拟内存空间地址去操作共享内存,从而达到进程间的数据通信 共享内存是进程间
阅读全文
摘要:49.1 System V IPC 介绍 49.1.1 System V IPC 概述 UNIX 系统存在信号、管道和命名管道等基本进程间通讯机制 System V 引入了三种高级进程间通信机制 消息队列、共享内存和信号量 IPC 对象(消息队列、共享内存和信号量)存在于内核中而不是文件系统中,由用
阅读全文
摘要:48.1 标准库中的管道操作 48.1.1 标准库中的管道操作 函数说明: 使用 popen() 创建的管道必须使用 pclose() 关闭。其实,popen/pclose 和标准文件输入/输出流中的 fopen()/fclose 十分相似。 封装管道的常用操作 返回值: popen:成功,返回文件
阅读全文
摘要:47.1 协同进程 47.1.1 介绍 两个进程通过两个管道进行双向通信称为协同进程。 47.1.2 例子 co_process.c add.c 先编译 add.c ,再编译 co_process.c,运行结果如下: 47.2 读写特性 47.2.1 介绍 通过打开两个管道来创建一个双向管道 管道是
阅读全文
摘要:46.1 管道介绍 46.1.1 管道通信 管道是针对于本地计算机的两个进程之间的通信而设计的通信方法,建立管道后,实际获得两个文件描述符:一个用于读取而另一个用于写入 最常见的 IPC 机制,通过 pipe 系统调用 管道是单工的,数据只能向一个方向流动,需要双向通信时,需要建立起两个管道 数据的
阅读全文
摘要:45.1 进程间通信要达到的目的 数据传输 一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间 共享数据 多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到 通知事件 一个进程需要向另一个或一组进程发送消息,通知(它们)发生了某种事件(如进程终止时要通
阅读全文
摘要:44.1 死锁 死锁: 两个线程试图同时占有两个资源,并按不同的次序锁定相应的共享资源 解决方式: 按相同的次序锁定相应的共享资源 使用函数 pthread_mutex_trylock(),它是函数 pthread_mutex_lock() 的非阻塞版本 两个线程试图同时占有两个资源,并按不同的次序
阅读全文
摘要:43.1 信号量 43.1.1 信号量介绍 信号量从本质上是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问 信号量可以实现线程的同步和互斥 通过 sem_post() 和 sem_wait() 函数对信号量进行加减操作从而解决线程的同步和互斥 信号量数据类型:sem_t 43.
阅读全文
摘要:42.1 线程状态转换 42.1.1 状态转换图 42.1.2 一个线程计算,多个线程获取的案例 编译运行结果如下: 42.2 读者-写者案例 几种情况: 1 个写者,1 个读者 1 个写者,多个读者 多个写者,多个读者 1 个写者,1 个读者 1 个写者,多个读者 多个写者,多个读者 完成第一种情
阅读全文
摘要:41.1 概念 41.1.1 条件变量的介绍 互斥锁的缺点是它只有两种状态:锁定和非锁定 条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足 条件变量内部是一个等待队列,放置等待的线程,线程在条件变量上等待和通知,互斥锁用来保护等待队列(对等待队列上锁),条件变量通常和互斥锁一
阅读全文
摘要:主题链接地址:https://www.cnblogs.com/kele-dad/category/1194627.html
阅读全文
摘要:40.1 互斥锁 40.1.1 介绍 互斥锁(mutex)是一种简单的加锁的方法来控制对共享资源的访问。 在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行访问。 若其他线程希望上锁一个已经被上了互斥锁的资源,则该线程挂起,直到上锁的线程释放互斥锁为止。 互斥锁的数据类型
阅读全文
摘要:39.1 概念 线程同步 是一个宏观概念,在微观上包含线程的相互排斥和线程先后执行的约束问题 解决同步方式 条件变量 线程信号量 线程互斥 线程执行的相互排斥 解决互斥的方式 互斥锁 读写锁 线程信号量 是一个宏观概念,在微观上包含线程的相互排斥和线程先后执行的约束问题 解决同步方式 条件变量 线程
阅读全文
摘要:38.1 线程属性初始化和销毁 返回值:成功返回 0;否则,返回错误编号 线程属性结构如下: 38.2 设置和获得分离属性 detachstate 取值: PTHREAD_CREATE_JOINABLE(默认值) 正常启动线程 必须调用 pthread_join 才能释放线程占有的资源 PTHREA
阅读全文
摘要:37.1 线程清理和控制函数 函数参数 rtn:清理函数指针 arg:调用清理函数传递的参数 execute:值 1 时,执行线程清理函数;值 0 时,不执行线程清理函数 返回值 成功,返回 0;否则,返回错误编号 触发线程调用清理函数的工作 调用 pthread_exit 响应取消请求 用非零 e
阅读全文
摘要:36.1 线程介绍 36.1.1 线程的基本概念 进程是资源管理的最小单位,线程是程序执行的最小单位 每个进程都有自己的数据段、代码段和堆栈段。 线程通常叫做轻型的进程,它包含独立的栈和 CPU 寄存器状态,线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源,包括打开的文件、内存页面、信号
阅读全文