相同机器进程间通信-信号量
来源:互联网 发布:java运行时异常 编辑:程序博客网 时间:2024/06/08 16:37
高效的进程间通信
共享内存 — 实时性最好
信号量
#include "io.h"#include <sys/sem.h>int init(int semnums, int value){ key_t key = ftok("/etc", 100); int semid = -1; semid = semget(key, semnums, 0600 | IPC_CREAT | IPC_EXCL); if (semid < 0) { /*已经存在*/ semid = semget(key, semnums, 0600); if (semid < 0) exit(0); return semid; } union semun { int val; struct semid_ds* buf; unsigned short * array; } va; va.array = (unsigned short *)calloc(semnums, sizeof(unsigned short)); int i = 0; for (i = 0; i < semnums; i++) { va.array[i] = value; } semctl(semid, semnums, SETALL, va); free(va.array); va.array = NULL; return semid;}void D(int semid){ semctl(semid, 0, IPC_RMID);}int P(int semid, int nums, int val)/*-,dierge参数是第几个*/{ struct sembuf buf[1] = { {nums, -val, SEM_UNDO} }; if (semop(semid, buf, 1) < 0) { fprintf(stderr, "semop + error:%s\n", strerror(errno)); return -1; } return 0;}int V(int semid, int nums, int val)/*+*/{ struct sembuf buf[1] = { {0, +val, SEM_UNDO} }; if (semop(semid, buf, sizeof(buf) / sizeof(struct(sembuf))) < 0) { fprintf(stderr, "semop - error:%s\n", strerror(errno)); return -1; } return 0;}void display(int semid, int nums){ union semun { int val; struct semid_ds* buf; unsigned short* array; } buffer; buffer.array = (unsigned short *) calloc (nums, sizeof(unsigned short)); semctl(semid, nums, GETALL, buffer); int i = 0; for (i = 0; i < nums; i++) { printf("%d ", buffer.array[i]); } printf("\n"); free(buffer.array); buffer.array = NULL; semctl(semid, nums, GETALL, buffer);}int main(int argc, char const *argv[]){ int sid = init(10, 1); display(sid, 10); P(sid, 4, 1); display(sid, 10); P(sid, 4, 1); D(sid); return 0;}
阅读全文
0 0
- 相同机器进程间通信-信号量
- 进程间通信 信号量
- 进程间通信--信号量
- 进程间通信-信号量
- 进程间通信-信号量
- 进程间通信--信号量
- 【进程间通信】信号量
- 进程间通信----信号量
- 进程间通信:信号量
- 进程间通信-信号量
- 进程间通信-信号量
- 进程间通信--信号量
- 进程间通信--信号量
- 进程间通信---->信号量
- 进程间通信-信号量
- 进程间通信-信号量
- 进程间通信--信号量
- 进程间通信----信号量
- html input type text标签属性和方法事件
- 那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)
- 关于maven项目如何获取在resource下的文件路径
- laravel+ajax 上传图片
- C#托管和非托管的资源(四)——处理非托管资源
- 相同机器进程间通信-信号量
- java操作xml——JDom使用详解
- java 发送email
- 10-EMM Procedure 1. Initial Attach Part-1
- 用conda管理Python包
- fscanf()函数详解
- 页面跳转三种方式
- java内存详解
- 粒子群算法(PSO)