Linux——POSIX有名信号量
来源:互联网 发布:致知在格物的意思 编辑:程序博客网 时间:2024/06/03 19:51
有名信号量
作用:主要用于同步线程或进程
头文件:#include <semaphore.h>
创建或打开信号量
/**
输入:const char* name 信号名
int oflag 标志(O_CREAT、O_CREAT|O_EXCL)
mode_t mode 访问权限
int value 初始化值
输出:sem_t* 有名信号的标识符
说明:创建并初始化一个有名信号量 或 打开一个已经创建的有名信号量
当oflag=O_CREAT 若有名信号量未创建,则创建,后面参数不能忽略必须写;
若信号量存在,则打开,后面的参数可以忽略
当oflag=O_CREAT|O_EXCL 若信号量已经存在,则输出error
*/
sem_t *sem_open(const char* name, int oflag, mode_t mode, int value);
关闭信号量的引用
/**
输入:sem_t* semid
输出:int
0——关闭成功
-1——关闭失败
说明:对有名信号量的引用进行关闭
*/
int sem_close(sem_t *semid);
删除系统中的信号量
/**
输入: const char* name 有名信号量名
输出: int
0——删除成功
-1——删除失败
说明: 删除系统中的有名信号量
*/
int sem_close(const char* name);
信号量的PV操作
/**
输入:sem_t semid 有名信号量标识符
说明: 若信号量的值为0,则此此线程或进程进入wait状态
若信号量的值为1,则信号量的值减1,然后继续运行此进程与线程
sem_wait(sem_t * semid);
/**
输入: sem_t semid 有名信号量标识符
说明: 信号量的值加1操作
sem_post(sem_t* semid);
注意:
信号量都是创建在/dev/shm下,如创建mysem,则在/dev/shm/下创建sem.mysem文件。有名信号量位于共享内存区中,那么它所保护的资源也必须位于共享内存区,
因此它可以与shmget与shmat结合使用。
简单实例:
#include <semaphore.h>
#inlcude <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
sem_t *semid;
int main(int argc, char** argv)
{
const char* semName = "sem_name_run";
semid = sem_open(semName,O_CREAT,0644,0);
if(semid == SEM_FAILED)
{
perror("unable to create semaphore");
unlink(semName);
exit(-1);
}
if(fork() == 0)
{
for(int i=0; i<10; ++i)
{
printf("childe process run: %d\n",i);
}
sem_post(semid);
}
sem_wait(semid);
for(int i=0; i<10; ++i)
{
printf("parent process run: %d\n",i);
}
sem_close(semid);
sem_unlink(semName);
return 0;
}
简单实例主要实现主进程与子进程之间实现同步功能,先阻塞主进程,当子进程运行完,在运行主进程。
- Linux——POSIX有名信号量
- Linux系统编程——进程同步与互斥:POSIX有名信号量
- Linux系统编程——进程同步与互斥:POSIX有名信号量
- <linux进程>POSIX有名信号量基本操作
- linux下posix有名信号量的简单使用示例
- Posix有名信号量、基于内存的信号量
- Posix有名信号量的基本操作
- 使用FIFO实现POSIX有名信号量
- 【Linux系统编程】进程同步与互斥:POSIX有名信号量
- 同步——Posix信号量
- linux——posix标准下的信号量
- linux IPC --- 有名信号量详解
- 进程同步与互斥:POSIX有名信号量
- 进程同步与互斥:POSIX有名信号量
- UNIX网络编程——Posix信号量
- Linux System V信号量&POSIX信号量区别
- Linux System V信号量&POSIX信号量
- Linux并发(POSIX信号量)
- EditorUtility 编辑器工具
- iOS-Core-Animation-Advanced-Techniques(六)
- 【博弈论】poj1704
- android LOG
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演+线性筛法+数论分块
- Linux——POSIX有名信号量
- android内存泄漏分析
- class.forName介绍
- poj 3468 A Simple Problem with Integers(线段树成段更新lazy)
- 步入SylixOS实时操作系统
- MFC ListControl数据导出到Excel
- encodeURI和 encodeURIComponent 的作用及应用
- Android Context简介
- C实现面向对象