共享内存与信号量集结合使用的案例

通过结合使用共享内存和信号量集,可以解决共享内存的同步问题。本文介绍了如何在Linux环境下,利用shmfifo_init创建共享内存,shmfifo_put存入数据,shmfifo_get取出数据,并通过shmfifo_destroy销毁共享内存和信号量集,以实现进程间的有效同步。
摘要由CSDN通过智能技术生成

前面说了共享内存有一些缺陷,无法达到进程同步的效果,然而将共享内存和信号量集结合使用,再加上锁的概念,就可以达到同步的结果。具体实现如下:

头文件:shmfifo.h

#ifndef __SHMFIFO_H__
#define __SHMFIFO_H__

typedef struct shm_head{
	int rd_idx;	 // 读位置
	int wr_idx;	 // 写位置
	int blocks;	 // 块数
	int blksz;   // 每块大小
} head_t;

typedef struct shmfifo {
	head_t *p_head; // 共享内存段的头
	char *p_payload; // 有效数据地址
	int shmid;      // 共享内存id
	int sem_full;   // 表示满
	int sem_empty;  // 表示还有几个可消费
	int sem_mutex;  // 互斥量
}shmfifo_t;

shmfifo_t* shmfifo_init(int key, int blocks, int blksz);

void shmfifo_put(shmfifo_t *fifo, const void *buf);

void shmfifo_get(shmfifo_t *fifo, void *buf);

void shmfifo_destroy(shmfifo_t *fifo);

#endif //__SHMFIFO_H__

其中,

shmfifo_t* shmfifo_init(int key, int blocks, int blksz);

shmfifo_init 是创建共享内存, 如果有,则初始化结构体中的成员,如果没有,则创建一块儿共享内存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值