虚拟机Linux下的信号量与共享内存

本文介绍了在Linux环境下如何利用信号量进行进程同步,并结合共享内存实现数据共享。通过`ulimit`命令查看和调整资源限制,详细阐述了信号量的P和V操作,以及二值信号量的概念。同时,讲解了共享内存的创建、映射、断开和控制,以及如何借助信号量实现对共享内存的访问控制。提供了`a.c`和`b.c`的示例代码来演示具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚拟机Linux下的信号量与共享内存

信号量

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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值