进程间通信之信号量Semaphore
来源:互联网 发布:无线网卡怎么改mac地址 编辑:程序博客网 时间:2024/06/05 08:18
程序1:
#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <unistd.h>#include<stdlib.h>#include<stdio.h>#define RESOURCE 4/*struct sem{unsigned short semval; // semaphore value unsigned short semzcnt; // # waiting for zero unsigned short semncnt; // # waiting for increase pid_t sempid; // ID of process that did last op }*/int main(void){int semid;union semun{int val;struct semid_ds*buf;unsigned short *array;struct seminfo*__buf;}arg;arg.val = RESOURCE;key_t key;if ((key = ftok(".",'c')) == -1) { perror("ftok error!\n"); exit(1); }printf("key:%d\n",key);// int semget(key_t key, int nsems, int semflg); create sem setif ((semid = semget(key,1,IPC_CREAT|0666)) == -1) { perror("semget error!\n"); exit(1); }printf("semid:%d\n",semid);printf("The num of available resource is %d \n",arg.val);/*int semctl(int semid, int semnum, int cmd, ...);Set the value of semval to arg.val for the semnum-th semaphore of the set*/if (semctl(semid,0,SETVAL,arg) == -1) { perror("semctl error!\n"); exit(1); }/* Each operation is performed on the sem_num-th semaphore of the semaphore set, * where the first semaphore of the set is numbered 0. */ struct sembuf sops; sops.sem_num = 0; /* Operate on semaphore 0 */ sops.sem_op = -1; /* the absolute value of sem_op is subtracted from semval */ sops.sem_flg = IPC_NOWAIT;while (1) { if (semop(semid,&sops,1) == -1) { perror("semop error!\n");puts("exit while1");semctl(semid,0,IPC_RMID,0);//Immediately remove the semaphore set exit(1); } sleep(3); }exit(0);}
程序2:
#include <sys/types.h>#include<stdlib.h>#include <sys/sem.h>#include <unistd.h>#include<stdio.h>int main(void){key_t key;int semid,semval;union semun{int val;struct semid_ds*buf;unsigned short *array;struct seminfo*__buf;}arg;if ((key = ftok(".",'c')) == -1) { perror("key error!\n"); exit(1); }/* create sem set */if ((semid = semget(key,1,IPC_CREAT|0666)) == -1) { perror("semget error!\n"); exit(1); }while(1) {//Return the value of semval for the semnum-th semaphore of the set. if ((semval = semctl(semid,0,GETVAL,0)) == -1) { perror("semctl error!\n"); exit(1); } if (semval > 0) { printf("There are %d resource is available\n",semval); } else { printf("Resource temporarily unavailable\n"); break; } sleep(3); }exit(0);}
阅读全文
0 0
- linux进程间通信之信号量(semaphore)
- linux进程间通信之信号量(semaphore)
- linux进程间通信之信号量(semaphore)
- 进程间通信之信号量Semaphore
- 进程通信-信号量semaphore
- linux进程间通信-信号量(semaphore)
- Linux进程间通信之信号量(semaphore)、消息队列(Message Queue)和共享内存(Share Memory) System V 进程通信方式:信号量(semaphore)、消息队列
- Linux进程间通信(IPC)之三——信号量(Semaphore)
- Linux进程间通信之信号量(semaphore)、消息队列(Message Queue)和共享内存(Share Memory)
- 进程间通信之-信号量semaphore--linux内核剖析(十)
- 进程间通信(IPC):信号量(Semaphore)
- 进程间通信方式——信号量(Semaphore)
- 进程间通信之信号量
- 进程间通信之信号量
- 进程间通信之信号量
- 进程间通信之信号量
- 进程间通信之信号量
- 进程间通信之信号量
- 协方差和协方差矩阵简要概述
- 竖式问题
- hdoj 1148 Rock-Paper-Scissors Tournament(模拟题)
- error while loading shared libraries: libnuma.so.1: cannot open shared object file
- JPGE、PNG和GIF的比较
- 进程间通信之信号量Semaphore
- ExecutorService 的理解与使用
- 图床
- Capstone日志2017-12-19
- 让你完全理解base64是怎么回事
- Android的IPC机制(一)——AIDL的使用
- java代理模式
- tensorflow学习---Variable
- 在 2018 年来临之际,你应该知道的 Vue.js 的 11 个组件库