#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的更多相关文章

  1. sem_wait sem_post信号量操作进本函数

    sem_wait   sem_post 信号量的数据类型为结构sem_t,它本质上是一个长整型的数.函数sem_init()用来初始化一个信号量.它的原型为: extern int sem_init ...

  2. STL - string(典型操作demo)

    1String概念  string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字符串,那么二者有什么区别呢 ...

  3. win32 htmlayout dom操作demo

    之前两篇关于win32 htmlayout博文,记载了一个实现了简单的点击按钮弹出新窗口的demo,之后实践中发现,图形界面开发,最重要的还是要实现响应用户操作,改变原有界面的功能.比如说,界面上有一 ...

  4. linux环形buff模拟多线程信号量操作

    互斥锁mutex变量的值非0即1,只能用来表示两种状态下的临界资源.而信号量是与之类似的,用来表示可用资源的,区别在于,信号量可以表示多个可用资源的. --值为2的信号量也就是特殊的互斥锁了. 那么下 ...

  5. JS Dom节点操作demo!

    通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ r ...

  6. leaflet简单操作demo

    今天大意了解了一下leaflet这个开源的 JavaScript 库,很强大. 结合腾讯地图,做了个简单的demo,作为一个学习的起点吧(各种API结合自身的业务) <!DOCTYPE html ...

  7. Posix信号量操作函数

    Posix信号量: 分类: Posix有名信号量:使用Posix IPC名字标识,可用于线程或进程间同步Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步 sem_open(). ...

  8. sem_open 信号量操作

    sem_open,计算机用语.意思是创建并初始化有名信号量或打开一个已存在的有名信号量 sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享. se ...

  9. MySql用statement实现DDL,DML,DQL的操作Demo

    Demo1 Connection connection=null; Statement stmt=null; int result=-1; try { Class.forName("com. ...

随机推荐

  1. 连载三:RobotFramework+Selenium+Jenkins分布式构建

    目标:Jenkins安装在服务器上,而使用Jenkins调用本机的脚本并在本机执行. 步骤: (1)需要有RobotFrameWork+Selenium的运行环境: python2.7,Robotfr ...

  2. TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option

    先解决他 详细不详解 在初始化 加上 --explicit_defaults_for_timestamp=true 即可

  3. python变量 - python基础入门(6)

    何为python变量,即数据类型.python变量一共六种类型:整数/浮点数/字符串/BOOL/列表/元组/字典,今天先讲解前四种,后三种留到后面的文章在讲解. 首先讲解print() 函数,prin ...

  4. ansible介绍、安装与配置

    一.ansible简介 (1)简介: Ansible是近年越来越火的一款自动化运维工具,其主要的功能是帮助运维实现IT工作的自动化,降低人为操作失误.提高业务自动化率,常用于软件部署.配置自动化.管理 ...

  5. uwp,右键浮出获取DataContext(数据上下文)

    列表视图类控件,如ListView/GridView,有时项目需要按下右键浮出选项,来获取Item的DataContext. 下面的示例代码,事先我已经有了一个自定义类Video,并且已经绑定了数据源 ...

  6. 【Linux内核】编译与配置内核(x86)

    [Linux内核]编译与配置内核(x86)  https://www.cnblogs.com/jamesharden/p/6414736.html

  7. windows和linux环境下使用google的glog日志库

    一.概述 glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5. githut地址:https://github.com/googl ...

  8. WUSTOJ 1237: 将八进制的字符串转换成等价的十进制字符串(Java)

    1237: 将八进制的字符串转换成等价的十进制字符串 题目   输入八进制,输出十进制.更多内容点击标题. 分析   输入的八进制数有20位.已经超出了Integer.MAX_VALUE的范围,因此此 ...

  9. javaSE面试题总结

      目 录 第一章 初识Java 1 1. Java跨平台原理(字节码文件.虚拟机) 1 2. Java的安全性 1 3. Java三大版本 2 4. Java开发运行过程 2 5. Java开发环境 ...

  10. python 创建es mapping

    import requests def get_(): url = "http://127.0.0.1:9200/indextest/_mapping?pretty" ss = r ...