这几天学的焦头烂额,加油.
#ifndef __SEMAPHORE_H__
#define __SEMAPHORE_H__
//控制信号量 semctl 用于初始化和删除 operate(操作)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
//操作信号量 semop 用于P操作和V操作 control(控制)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
//创建信号量 semget
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
union semun
{
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux specific) */
};
//初始化信号量
int sem_init(int sem_id)
{
union semun sem;
sem.val = 1;
int ret = semctl(sem_id, 0, SETVAL, sem);
return ret;
}
//信号量p操作
int sem_p(int sem_id)
{
struct sembuf sem;
sem.sem_num = 0;
sem.sem_op = -1; //p操作
sem.sem_flg = SEM_UNDO;
int ret = semop(sem_id, &sem, 1);
return ret;
}
//信号量v操作
int sem_v(int sem_id)
{
struct sembuf sem;
sem.sem_num = 0;
sem.sem_op = 1; //v操作
sem.sem_flg = SEM_UNDO;
int ret = semop(sem_id, &sem, 1);
return ret;
}
//删除信号量
int sem_del(int sem_id)
{
int ret = semctl(sem_id, 0, IPC_RMID);
return ret;
}
#endif