多进程之间共享内存通信之pthread_mutex_t

    在做项目的过程中发现一种简便的多进程通信的方法,现将它记录下来。该项目采用多进程的方式向多个客户端同时发视频数据。

    1、创建共享内存结构体

    struct shm_mutex {
int pic_size;
char pic_buf[PIC_COUNT];
pthread_mutex_t mutex;
pthread_mutexattr_t mutexattr;

    };

     struct shm_mutex   *pic_mutex;

    2、申请共享内存空间

        int fd = open("test",O_CREAT|O_RDWR,0777);
ftruncate(fd,sizeof(*pic_mutex));   //改变文件大小
pic_mutex = mmap(NULL,sizeof(struct shm_mutex),
PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);  //用户地址映射到内核空间
close(fd);

memset(pic_mutex,0,sizeof(*pic_mutex));

    3、设置共享内存进程间属性

    pthread_mutexattr_init(&pic_mutex->mutexattr);

    pthread_mutexattr_setpshared(&pic_mutex->mutexattr,PTHREAD_PROCESS_SHARED);//此句将线程锁改变为进程间共用属性

    pthread_mutex_init(&pic_mutex->mutex,&pic_mutex->mutexattr);

    在此线程锁的进程间共用属性设置完毕,即可对其进行上锁解锁操作。

   4、操作共享内存

    pthread_mutex_lock(&pic_mutex->mutex);  //上锁
    bzero(pic_mutex->pic_buf, PIC_COUNT);   
    pic_mutex->pic_size = get_picture(pic_mutex->pic_buf);   //获取图片

    pthread_mutex_unlock(&pic_mutex->mutex); //解锁


   pthread_mutex_lock(&pic_mutex->mutex);
   ret_send = sendto(udp_connfd, pic_mutex->pic_buf, pic_mutex->pic_size, 0,
(struct sockaddr *)&client_addr, len);    //发送图片 至客户端
   pthread_mutex_unlock(&pic_mutex->mutex);


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值