博客
关于我
进程间同步
阅读量:593 次
发布时间:2019-03-12

本文共 1477 字,大约阅读时间需要 4 分钟。

进程间使用mutex实现数据同步:

#include 
#include
#include
#include
#include
#include
#include
#include
struct mt { int num; pthread_mutex_t mutex; pthread_mutexattr_t mutexattr;};int main(void){ int fd, i; struct mt *mm; pid_t pid; // 创建共享内存区域并初始化 // 以下代码用于创建并打开一个共享内存区段 // fd = open("mt_test", O_CREAT | O_RDWR, 0777); // ftruncate(fd, sizeof(*mm)); // mm = mmap(NULL, sizeof(*mm), PROT_READ|PROT_write, MAP_SHARED, fd, 0); // close(fd); // unlink("mt_test"); mm = mmap(NULL, sizeof(*mm), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0); memset(mm, 0, sizeof(*mm)); // 初始化mutex属性并设置为进程共享 pthread_mutexattr_init(&mm->mutexattr); pthread_mutexattr_setpshared(&mm->mutexattr, PTHREAD_PROCESS_SHARE); // 初始化互斥锁 pthread_mutex_init(&mm->mutex, &mm->mutexattr); // 创建子进程 pid = fork(); if (pid == 0){ // 子进程执行 for (i = 0; i < 10; i++){ pthread_mutex_lock(&mm->mutex); mm->num++; printf("-child----num++ %d\n", mm->num); pthread_mutex_unlock(&mm->mutex); sleep(rand()%2 + 1); } } else if (pid > 0){ // 父进程执行 for (i = 0; i < 10; i++){ sleep(rand()%2); pthread_mutex_lock(&mm->mutex); mm->num += 2; printf("-parent---num+=2 %d\n", mm->num); pthread_mutex_unlock(&mm->mutex); } wait(NULL); // 等待子进程完成 } // 销毁锁和属性 pthread_mutexattr_destroy(&mm->mutexattr); pthread_mutex_destroy(&mm->mutex); munmap(mm, sizeof(*mm));}

运行结果展示过程中,父节点每次增加2,而子节点每次增加1,整个过程体现了进程间使用互斥锁实现的同步机制。这样可以确保在多进程环境下共享变量的访问是安全的。

转载地址:http://mznxz.baihongyu.com/

你可能感兴趣的文章
不编译只打包system或者vendor image命令
查看>>
The wxWindows Library Licence (WXwindows)
查看>>
leetcode——第203题——虚拟头结点
查看>>
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
查看>>
MySQL----基础及常用命令
查看>>
flink启动(二)
查看>>
前端开发进阶手册.pdf
查看>>
软件架构设计和MESH经验之谈
查看>>
关于宝塔面板安装的mysql用Navicat连接出现2003的错误解决
查看>>
Windows2016 FTP用户隔离
查看>>
js传入参数是中文的时候出现 “******”未定义错误
查看>>
吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)
查看>>
pair的用法
查看>>
SQL基本操作命令
查看>>
C# WinForm程序退出的方法
查看>>
onFailure unexpected end of stream
查看>>
Flex 布局的自适应子项内容过长导致其被撑大问题
查看>>
PL/SQL 动态Sql拼接where条件
查看>>
Lua-table 一种更少访问的安全取值方式
查看>>
虚函数
查看>>