Linux下的多进程间共享资源的互斥访问
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <pthread.h>
pthread_mutex_t* g_mutex;
//创建共享的mutex
void init_mutex(void)
{ int ret; //g_mutex一定要是进程间可以共享的,否则无法达到进程间互斥 g_mutex=(pthread_mutex_t*)mmap(NULL, sizeof(pthread_mutex_t), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0); if( MAP_FAILED==g_mutex ) { perror("mmap"); exit(1); } //设置attr的属性 pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); //一定要设置为PTHREAD_PROCESS_SHARED //具体可以参考http://blog.chinaunix.net/u/22935/showart_340408.html ret=pthread_mutexattr_setpshared(&attr,PTHREAD_PROCESS_SHARED); if( ret!=0 ) { perror("init_mutex pthread_mutexattr_setpshared"); exit(1); } pthread_mutex_init(g_mutex, &attr);
}
int main(int argc, char *argv[])
{ init_mutex(); int ret; char str1[]="this is child process/r/n"; char str2[]="this is father process/r/n"; int fd=open("tmp", O_RDWR|O_CREAT|O_TRUNC, 0666); if( -1==fd ) { perror("open"); exit(1); } pid_t pid; pid=fork(); if( pid<0 ) { perror("fork"); exit(1); } else if( 0==pid ) { ret=pthread_mutex_lock(g_mutex); if( ret!=0 ) { perror("child pthread_mutex_lock"); } sleep(10);//测试是否能够阻止父进程的写入 write(fd, str1, sizeof(str1)); ret=pthread_mutex_unlock(g_mutex); if( ret!=0 ) { perror("child pthread_mutex_unlock"); } } else { sleep(2);//保证子进程先执行 ret=pthread_mutex_lock(g_mutex); if( ret!=0 ) { perror("father pthread_mutex_lock"); } write(fd, str2, sizeof(str2)); ret=pthread_mutex_unlock(g_mutex); if( ret!=0 ) { perror("father pthread_mutex_unlock"); } } wait(NULL); munmap(g_mutex, sizeof(pthread_mutex_t));
}
运行后tmp文件内容为:
this is child process
this is father process
Linux下的多进程间共享资源的互斥访问相关推荐
- Linux下不同服务器间数据传输
因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...
- linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)
因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...
- linux下不同服务器间数据传输(wget,scp)
一.wget是Linux下最常用的http/ftp文件下载工具1.wget断点续传,只需要加上-c参数即可,例如:代码:wget-chttp://www.abc.com/abc.zip-Oabc.zi ...
- 任务间共享资源问题总结
文章目录 1 任务间共享资源问题总结 1 任务间共享资源问题总结 参考资料: 手把手教你学用嵌入式操作系统
- Linux下IPC方式之共享存储映射(mmap)
Linux下IPC方式之共享存储映射(mmap) 1. 共享存储映射(mmap) 2. mmap九问 3. mmap实现父子进程通信 4. 匿名映射 5. mmap实现无血缘进程通信 1. 共享存储映 ...
- Linux下Wget获取云盘资源
Linux下Wget获取云盘资源 使用linux过程中,经常使用云盘的我们往往需要下载云盘资源,但是在firefox页面下载往往已失败告终,怎么办呢?这里引入了firefox插件flashgot,通过 ...
- 【Linux下挂载QNAP NFS 共享权限异常处理】
Linux下挂载QNAP NFS 共享权限异常处理 前言 現象 處理 相關命令 NFS 配置中的權限壓縮 前言 在Linux 上掛載QNAP的NFS共享且啟用ACL可能會遇到ROOT用戶正常,但非RO ...
- Java多线程学习三十一:ThreadLocal 是用来解决共享资源的多线程访问的问题吗?
ThreadLocal 是不是用来解决共享资源的多线程访问的. 这是一个常见的面试问题,如果被问到了 ThreadLocal,则有可能在你介绍完它的作用.注意点等内容之后,再问你:ThreadLoca ...
- linux配置指定ip访问指定端口号,操作系统linux和dos linux下通过iptables只允许指定ip地址访问指定端...
一篇 : linux下通过iptables只允许指定ip地址访问指定端口的设置方法 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清 ...
最新文章
- Linux 计划任务整理
- php中register_global,PHP安全之register_globals的on和off的区别
- GDCM:gdcm::Attribute的测试程序
- c++Data Member的绑定
- 前端学习(1362):学生档案信息管理4
- org.apache.jasper.JasperException: Unable to compile class for JSP:
- Advapi 登录类型8的错误
- Java核心技术- Java内存分配原理
- php 给富文本里的图片增加ALT、TITLE属性
- 值得收藏的网站----安全
- 如何以2万美元出售你的软件
- 第六章 选择语句、循环语句、Debug
- QLCDNumber设置背景色和显示数字颜色
- markdown编辑器——文字颜色、大小、字体、背景色、图片大小与居中对齐的设置方法
- c语言穷举法等式求缺位数,四年级下册数学奥数试题-培优拓展训练--第13讲:数字谜题(教师版)...
- python常用画图颜色
- 如何使用predict()输出预测结果 以及 输出值转换为0/1值。
- 收集得最全的sql 语句
- Java学习笔记Day02
- 10以内数的组成分解图_10以内数的组成与分解
热门文章
- 云计算安全威胁集中营
- php 上传大文件涉及的配置,upload_max_filesize,post_max_size
- springMVC 注解 controller层的优化
- Spring中property-placeholder的使用与解析
- 30分钟 带你浅入requirejs源码
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- SystemCenter2012SP1实践(16)私有云的第一个模板
- image_thumb1
- sscanf用法(转)
- 数字信号的最佳接收理论