semaphore.c

来自「&#61550 使用信号量实现有限缓冲区的生产者和消费者问题 &#61550」· C语言 代码 · 共 54 行

C
54
字号
#include <unistd.h>#include <sys/types.h>#include <sys/sem.h>#include <stdio.h>#include "stdlib.h"int semaphore_wait(int id, int idx){  struct sembuf sem_op;   		sem_op.sem_num = idx;   		sem_op.sem_op = -1;   		sem_op.sem_flg = SEM_UNDO ;//| IPC_NOWAIT;   		return semop(id, &sem_op, 1) ;	} int semaphore_signal(int id, int idx){   struct   sembuf   sem_op;      sem_op.sem_num = idx;      sem_op.sem_op = 1;      sem_op.sem_flg = SEM_UNDO;      if(semop(id, &sem_op, 1) < 0)		return -1;	return 0;}int semaphore_create(key_t sem_key,int n){	unsigned long sem_id;	int ret;	sem_id = semget(sem_key, n, IPC_CREAT | 0600);  	return sem_id;}void semaphore_set_val(int id,int idx,int val){	 int ret;	 ret = semctl(id, idx, SETVAL, val);   // 设置互斥信号量初值	if(ret < 0)	{		return -1;	}}void semaphore_destroy(int  id){	semctl(id,0,IPC_RMID,0);}void semaphore_state(int id){	printf("SERVER:semaphore:0x%x\n",semctl(id, 0, GETVAL, 0 ));	}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?