sem_init

Posix信号量

孤街浪徒 提交于 2019-11-29 15:39:37
目录 1. Posix IPC 概述 IPC名字 创建与打开IPC 读写权限与创建标志 用户访问权限 IPC对象的持续性 2. 信号量概述 信号量定义及分类 信号量操作 信号量、互斥锁和条件变量的差异 3. Posix有名信号量 创建和打开 关闭和删除 等待和挂出 获取信号量的值 4. Posix无名信号量 5. Posix信号量限制 1. Posix IPC 概述 以下三种类型的IPC合称为Posix IPC: Posix信号量 Posix消息队列 Posix共享内存 Posix IPC在访问它们的函数和描述它们的信息上有一些类似点,主要包括: IPC名字 创建或打开时指定的读写权限、创建标志以及用户访问权限 下表汇总了所有Posix IPC函数。 信号量 消息队列 共享内存 头文件 semaphore.h mqueue.h sys/mman.h 创建、打开或删除IPC的函数 sem_open sem_close sem_unlink sem_init sem_destroy mq_open mq_close mq_unlink shm_open shm_unlink 控制IPC操作的函数 mq_getattr mq_setattr ftruncate fstat IPC操作函数 sem_wait sem_trywait sem_post sem_getvalue mq_send

信号量整理

无人久伴 提交于 2019-11-29 01:42:16
信号量 一、 1、 信号量的数据类型为结构 sem_t,它本质上是一个长整型的数。 2 、例如: typedef struct { struct _pthread_fastlock __sem_lock; int __sem_value; _pthread_descr __sem_waiting; } sem_t; 3、sem_t分为有名和无名。有名的sem_t通过sem_open来创建 用于进程通信; 而无名的 sem_t通过sem_init的初始化 是基于内存的信号量 。 4、 有名和无名的 sem_t主要区别: ( 1) 效率:有名 sem_t是放在文件,无名的sem_t是放在内存。 ( 2) 限制:有名的 sem_t可以用来同步多线程,任意多进程。而无名的sem_t可以用来同步多线程,以及Fork出来的进程间的同步。 (如果没有放到共享内存,就算将 pshared设置为1,也起不了作用。 ) ( 3)pshared传递一个非零将会使函数调用失败,属于无名信号量。 二、 1、sem_init: 用来初始化一个信号量。 1、int sem_init(sem_t *sem, int pshared, unsigned int value); ( 1)sem_init函数是Posix信号量操作中的函数, 作用是对由 sem指定的信号量进行初始化。sem_init()