
进程间同步
发布日期:2021-05-15 09:23:30
浏览次数:11
分类:精选文章
本文共 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,整个过程体现了进程间使用互斥锁实现的同步机制。这样可以确保在多进程环境下共享变量的访问是安全的。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月16日 09时56分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07
重载和重写的区别:
2019-03-07
搭建Vue项目步骤
2019-03-07
账号转账演示事务
2019-03-07
idea创建工程时错误提醒的是architectCatalog=internal
2019-03-07
SpringBoot找不到@EnableRety注解
2019-03-07
简易计算器案例
2019-03-07
在Vue中使用样式——使用内联样式
2019-03-07
Explore Optimization
2019-03-07
Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
2019-03-07