
IPC
文章平均质量分 55
IPC
平平无奇的小垃圾
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
eventfd
initval:创建eventfd时它所对应的64位计数器的初始值;flags:eventfd文件描述符的标志,可由三种选项组成:EFD_CLOEXEC、EFD_NONBLOCK和EFD_SEMAPHORE。EFD_CLOEXEC表示返回的eventfd文件描述符在fork后exec其他程序时会自动关闭这个文件描述符;EFD_NONBLOCK设置返回的eventfd非阻塞; EFD_SEMAPHORE表示将eventfd作为一个信号量来使用。如果eventfd设置了EFD_SEMAPH...原创 2021-02-18 18:07:15 · 360 阅读 · 0 评论 -
消息队列—Posix消息队列
1原创 2020-12-18 18:49:16 · 311 阅读 · 1 评论 -
共享内存区—systemV共享内存
1 创建shmget函数只是打开或创建一个共享内存区,并没有映射到进程的地址空间,连接到进程地址空间需要调用shmat函数2 连接到进程地址空间3 断开共享内存与进程地址空间的连接4 共享内存控制函数5 限制6 总结与posix共享内存区的差别是posix共享内存区可以通过调用ftruncate函数修改共享内存区大小,而systemV共享内存区大小是调用shmget创建是固定的,后续不可修改...原创 2020-12-08 09:18:00 · 155 阅读 · 0 评论 -
共享内存区—Posix共享内存
1 概述Posix共享内存区是基于mmap实现的,posix共享内存是通过shm_open函数创建一个共享内存区对象,将此对象通过mmap函数映射到进程的地址空间2 创建&删除3 修改共享内存区对象(文件也可以)的大小ftruncate并不保证扩展的区域会默认初始化为0,所以我们扩展以后首先要手动初始化扩展的区域4 总结...原创 2020-12-07 19:41:56 · 554 阅读 · 0 评论 -
共享内存区—内存映射(文件映射)
1 内存映射作用2 mmap映射3 munmap从进程的地址空间删除一个映射关系4 msync同步5 匿名内存映射通过void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)映射函数中的fd参数可以看出一般内存映射是将一个文件映射到内存区,我们也可以不使用文件来创建一个匿名内存映射,这样可以更简单的提供一个例如供父子进程共享的一个内存区域(子进程创建后不共享父进程的地址空间,各自有各自的地原创 2020-12-07 09:29:21 · 2310 阅读 · 1 评论 -
信号量—systemV信号量
1.概述systemV相对于posix信号量来说增加了另一个复杂度,systemV信号量每次操作一个信号量集,posix信号量每次只能操作单个信号量2.创建调用semget只是创建或访问一个信号量集,并没有初始化各信号量的值3.操作struct sembuf不能使用静态初始化的方法;semop可以只操作信号量集中的某一个信号量,nops传1,sembuf结构中的sem_num指定需要操作的信号量的索引即可;注:指定SEM_UNDO标志后,可以看到内核会维护一个semadj变量,该变量的意原创 2020-12-03 18:32:14 · 657 阅读 · 1 评论 -
信号量—Posix信号量
1.posix有名信号量&无名信号量(基于内存的信号量)2.有名信号量2.1创建&删除一个进程终止时,内核会自动关闭该进程打开着的信号量,但关闭信号量并没有将信号量从系统删除,该信号量依然存在,只有调用sem_unlink才能从系统中删除。2.2 等待&挂出每次只能加1或减1,与system V信号量不同(可加减任意整数)3.互斥锁&信号量差别注意当没有线程在等待条件变量时,若产生了条件变量信号,那么此信号将会丢失,而信号量则不会,若没有线程等待信号量,原创 2020-11-25 09:39:56 · 473 阅读 · 0 评论 -
锁—记录上锁
记录锁的功能是:当一个进程正在读或者修改文件的某一个部分时,它可以阻止其他进程修改同一文件区。记录锁其实是字节范围锁,因为它锁定的只是文件中的一个区域,也可能是整个文件。1.基础介绍SVR3通过fcntl函数增加了记录锁功能。fcntl函数的原型已经在以前给出,这边再重复一次。#include<fcntl.h> int fcntl(int filedes, int cmd, .../* struct flock *flockptr */); 对于记录锁,cmd是F_GETLK、F_转载 2020-11-24 19:25:17 · 292 阅读 · 0 评论 -
linux条件变量
In Thread1:pthread_mutex_lock(&m_mutex);pthread_cond_wait(&m_cond,&m_mutex);pthread_mutex_unlock(&m_mutex);In Thread2:pthread_mutex_lock(&m_mutex);pthread_cond_signal(&m_cond);pthread_mutex_unlock(&m_mutex);为什么要与pthread_转载 2020-08-31 14:39:32 · 119 阅读 · 0 评论 -
条件变量—虚假唤醒(放到while循环的原因)
**Linux中帮助中提到:**在多核处理器下,pthread_cond_signal可能会激活多于一个线程(阻塞在条件变量上的线程)。结果是,当一个线程调用pthread_cond_signal()后,多个调用pthread_cond_wait()或pthread_cond_timedwait()的线程返回。这种效应成为”虚假唤醒。虽然虚假唤醒在pthread_cond_wait函数中可以解决,为了发生概率很低的情况而降低边缘条件,效率是不值得的,纠正这个问题会降低对所有基于它的所有更高级的同步操作的并发转载 2020-09-01 13:20:55 · 1850 阅读 · 1 评论 -
锁—读写锁
1、概述读写锁与互斥量类似,不过读写锁允许更高的并行性。互斥量要么是锁住状态,要么是不加锁状态,而且一次只有一个线程对其加锁。读写锁可以有三种状态:读模式下加锁状态,写模式下加锁状态,不加锁状态。一次只有一个线程可以占有写模式的读写锁,但是多个线程可用同时占有读模式的读写锁。读写锁也叫做共享-独占锁,当读写锁以读模式锁住时,它是以共享模式锁住的,当它以写模式锁住时,它是以独占模式锁住的。2、读写锁API读写锁的数据类型为pthread_rwlock_t。如果这个类型的某个变量是静态分配的,那么可通过给转载 2020-11-12 18:13:43 · 277 阅读 · 0 评论 -
消息队列—SystemV消息队列
1.生成一个key2.创建或访问一个消息队列3.发送一个消息。ptr指针为消息内容,是void*类型,该指针是一个结构指针,该结构有一个模版,但是模版的消息长度仅为1字节,所以我们可以自己定义一个消息结构体,需要注意的是,该结构体的第一个成员必须为long型的一个变量,用于表示该消息的优先级(也可以理解为消息类型,称为优先级是方便和Posix消息队列中的消息优先级作比较)。参数length为不包含long型优先级变量的消息长度,即该消息结构体的大小减去long型优先级变量的大小,剩余的大小称为消原创 2020-11-04 10:39:05 · 395 阅读 · 0 评论 -
管道&FIFO详解
1.阻塞与非阻塞读写特性,重点:没有用来写的fifo或管道时,读管道或fifo会返回02.write管道具体分析,重点:原子性,SIGPIPE3.管道的消息是字节流模型,没有消息边界,所以需要用对消息加上消息长度字段等方法来对数据进行包划分,也可以以一个结构体作为消息进行发送,接收方直接每次读取结构体大小即可读取一个数据包。4.管道的限制5. 例程:以结构体为消息通信...原创 2020-10-26 18:31:54 · 868 阅读 · 0 评论 -
进程间通信优缺点
linux上面的IPC大多都是从UNIX上面继承而来。最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、System V共享内存区。由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵循POSIX标准。Posix IPC包括: Posix转载 2020-09-14 18:58:53 · 513 阅读 · 0 评论