#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下的多进程间共享资源的互斥访问相关推荐

  1. Linux下不同服务器间数据传输

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  2. linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  3. linux下不同服务器间数据传输(wget,scp)

    一.wget是Linux下最常用的http/ftp文件下载工具1.wget断点续传,只需要加上-c参数即可,例如:代码:wget-chttp://www.abc.com/abc.zip-Oabc.zi ...

  4. 任务间共享资源问题总结

    文章目录 1 任务间共享资源问题总结 1 任务间共享资源问题总结 参考资料: 手把手教你学用嵌入式操作系统

  5. Linux下IPC方式之共享存储映射(mmap)

    Linux下IPC方式之共享存储映射(mmap) 1. 共享存储映射(mmap) 2. mmap九问 3. mmap实现父子进程通信 4. 匿名映射 5. mmap实现无血缘进程通信 1. 共享存储映 ...

  6. Linux下Wget获取云盘资源

    Linux下Wget获取云盘资源 使用linux过程中,经常使用云盘的我们往往需要下载云盘资源,但是在firefox页面下载往往已失败告终,怎么办呢?这里引入了firefox插件flashgot,通过 ...

  7. 【Linux下挂载QNAP NFS 共享权限异常处理】

    Linux下挂载QNAP NFS 共享权限异常处理 前言 現象 處理 相關命令 NFS 配置中的權限壓縮 前言 在Linux 上掛載QNAP的NFS共享且啟用ACL可能會遇到ROOT用戶正常,但非RO ...

  8. Java多线程学习三十一:ThreadLocal 是用来解决共享资源的多线程访问的问题吗?

    ThreadLocal 是不是用来解决共享资源的多线程访问的. 这是一个常见的面试问题,如果被问到了 ThreadLocal,则有可能在你介绍完它的作用.注意点等内容之后,再问你:ThreadLoca ...

  9. linux配置指定ip访问指定端口号,操作系统linux和dos linux下通过iptables只允许指定ip地址访问指定端...

    一篇 : linux下通过iptables只允许指定ip地址访问指定端口的设置方法 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清 ...

最新文章

  1. Linux 计划任务整理
  2. php中register_global,PHP安全之register_globals的on和off的区别
  3. GDCM:gdcm::Attribute的测试程序
  4. c++Data Member的绑定
  5. 前端学习(1362):学生档案信息管理4
  6. org.apache.jasper.JasperException: Unable to compile class for JSP:
  7. Advapi 登录类型8的错误
  8. Java核心技术- Java内存分配原理
  9. php 给富文本里的图片增加ALT、TITLE属性
  10. 值得收藏的网站----安全
  11. 如何以2万美元出售你的软件
  12. 第六章 选择语句、循环语句、Debug
  13. QLCDNumber设置背景色和显示数字颜色
  14. markdown编辑器——文字颜色、大小、字体、背景色、图片大小与居中对齐的设置方法
  15. c语言穷举法等式求缺位数,四年级下册数学奥数试题-培优拓展训练--第13讲:数字谜题(教师版)...
  16. python常用画图颜色
  17. 如何使用predict()输出预测结果 以及 输出值转换为0/1值。
  18. 收集得最全的sql 语句
  19. Java学习笔记Day02
  20. 10以内数的组成分解图_10以内数的组成与分解

热门文章

  1. 云计算安全威胁集中营
  2. php 上传大文件涉及的配置,upload_max_filesize,post_max_size
  3. springMVC 注解 controller层的优化
  4. Spring中property-placeholder的使用与解析
  5. 30分钟 带你浅入requirejs源码
  6. Android中如何使用ViewPager实现类似laucher左右拖动效果
  7. SystemCenter2012SP1实践(16)私有云的第一个模板
  8. image_thumb1
  9. sscanf用法(转)
  10. 数字信号的最佳接收理论