信号量
ulimit -a 查看限制信息
ulimit -代号 更改大小(只能临时改变)
信号量的一个更正式的定义:
特殊变量,只可以改变,对信号量加一、减一的操作都是原子操作,一般取正数值,它的作用:同步资源,用于管理对资源的访问。
含有两种操作:
P (信号量变量):用于等待
V (信号量变量):用于发送信号
这两种操作的定义如下:
P(sv) | 如果sv的值大于零,就给它减去一;如果只为零,就挂起该进程的执行 |
---|---|
V(sv) | 如果有其他进程因等待sv而被挂起,就让他恢复运行;如果没有其他进程因等待sv而被挂起,就给他加上一 |
二值信号量:0 ,1;用这两个值来控制进程的执行和挂起状态;
定义两个信号量的具体代码实现:
sem.h文件
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<assert.h>
#include<string.h>
#include<sys/sem.h>
union semun
{
int val;
};
void sem_init();
void sem_p(int index);
void sem_v(int index);
void sem_destroy();
sem.c文件
#include"sem.h"
#define MAX_SEM 2
static int semid = -1;
void sem_init()
{
semid=semget((key_t)1234,MAX_SEM,IPC_CREAT|IPC_EXCL|0600);
if( semid == -1 )
{
semid=semget((key_t)1234,MAX_SEM,0600);
if (semid == -1)
{
perror("semget error"