c信号量操作demo
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/sem.h> // union semun {
// int val;
// struct semid_ds *buf;
// unsigned short *array;
// struct seminfo *__buf;
// }; int P(int semid, int semnum) {
struct sembuf sops={semnum, -, SEM_UNDO};
return (semop(semid, &sops, ));
} int V(int semid, int semnum) {
struct sembuf sops = {semnum, +, SEM_UNDO};
return (semop(semid, &sops, ));
} void test2(); int main(int argc, char **argv){
printf("argc:%d, argv:%s\n", argc, *argv);
test2();
return ;
} void test2(){
int key;
int semid,ret;
union semun arg;
struct sembuf semop;
int flag; key = ftok("/tmp", 0x66);
arg.val = ;
if (key < ) {
perror("ftok key error");
} semid = semget(key, , IPC_CREAT | );
if(semid == -) {
perror("create semget error");
} //对0号信号量设置为初始值
ret = semctl(semid, , SETVAL, arg);
printf("ret:%d\n", ret);
if(ret < ) {
perror("ctl sem error");
semctl(semid, , IPC_RMID, arg);
} //取0号信号量的值
ret = semctl(semid, , GETVAL, arg);
printf("after semctl setval sem[0].val=[%d]\n", ret); //P操作
flag = P(semid, );
flag = P(semid, );
ret = semctl(semid, , GETVAL, arg);
printf("after P sem[0].val=[%d]\n",ret); //V操作
if (V(semid, ) < ) {
perror("V operator error");
}
if (V(semid, ) < ) {
perror("V operator error");
}
ret = semctl(semid, , GETVAL, arg);
printf("after v 操作 sem[0].val=%d\n", ret);
}
c信号量操作demo的更多相关文章
- sem_wait sem_post信号量操作进本函数
sem_wait sem_post 信号量的数据类型为结构sem_t,它本质上是一个长整型的数.函数sem_init()用来初始化一个信号量.它的原型为: extern int sem_init ...
- STL - string(典型操作demo)
1String概念 string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字符串,那么二者有什么区别呢 ...
- win32 htmlayout dom操作demo
之前两篇关于win32 htmlayout博文,记载了一个实现了简单的点击按钮弹出新窗口的demo,之后实践中发现,图形界面开发,最重要的还是要实现响应用户操作,改变原有界面的功能.比如说,界面上有一 ...
- linux环形buff模拟多线程信号量操作
互斥锁mutex变量的值非0即1,只能用来表示两种状态下的临界资源.而信号量是与之类似的,用来表示可用资源的,区别在于,信号量可以表示多个可用资源的. --值为2的信号量也就是特殊的互斥锁了. 那么下 ...
- JS Dom节点操作demo!
通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ r ...
- leaflet简单操作demo
今天大意了解了一下leaflet这个开源的 JavaScript 库,很强大. 结合腾讯地图,做了个简单的demo,作为一个学习的起点吧(各种API结合自身的业务) <!DOCTYPE html ...
- Posix信号量操作函数
Posix信号量: 分类: Posix有名信号量:使用Posix IPC名字标识,可用于线程或进程间同步Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步 sem_open(). ...
- sem_open 信号量操作
sem_open,计算机用语.意思是创建并初始化有名信号量或打开一个已存在的有名信号量 sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享. se ...
- MySql用statement实现DDL,DML,DQL的操作Demo
Demo1 Connection connection=null; Statement stmt=null; int result=-1; try { Class.forName("com. ...
随机推荐
- Mac安装7Z以及Mac下查看隐藏文件夹
一:Mac下安装7Z: 1:brew直接安装解压工具 $ brew search 7z 会搜索到: ==> Formulae p7zip 2:$ brew install p7zip ...
- vue-cli2.0项目的搭建
1.第一步:安装vue-cli 命令行输入cmd或按住shift鼠标右键打开powershell 输入命令 npm install --global vue-cli 按enter键 2.第二步:创建项 ...
- linux shell `符号详解
linux shell `符号详解 <pre>[root@iZ23uewresmZ arjianghu]# echo `ls`asss.html common guaji.php imag ...
- Git强制推送代码到多个远程仓库
git push -f origin master 注释: origin 远程仓库名, master 分支名,-f 为force,意为:强行.强制.
- HikariCP连接池及其在springboot中的配置
主要配置如下: 配置项 描述 构造器默认值 默认配置validate之后的值 validate重置 autoCommit 自动提交从池中返回的连接 true true - connectionTime ...
- C++操作文件行(读取,删除,修改指定行)
/******************************************************** Copyright (C), 2016-2018, FileName: main A ...
- 利用Python进行数据分析_Pandas_处理缺失数据
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 读取excel数据 import pandas as pd import ...
- MogileFS表说明
MogileFS大致的表说明如下 checksum:用来存放文件的校验和class:文件分类定义device:主机上的可用设备定义,包括设备可用空间,使用的权重等信息domain:域定义信息file: ...
- (五)Redis之List
一.List常用命令 两端添加 两端弹出 1.2. 两端添加和两端弹出 package myRedis01; import java.util.HashMap; import java.util.Li ...
- (九)二进制文件在webservice中的处理(以DataHandler方式)
一.需求 1. 客户端从服务端下载附件 2. 客户端上传附件到服务端 二.案例 本章通过DataHander的方式来进行传递. 注意: 1:接口中要定义@MTOM 2:方法中要使用@XmlMime ...