1.操作系统分为ring0(内核层)和ring3(应用层)两层。

  • ring0层出错会蓝屏,ring3层出错程序就会挂了。
  • event和mutex创建他的指针是应用层,但是它的内部是ring0层,ring0层可以看到所有的进程的内存。一个进程不能读写另外一个进程的内存,我们必须通过注释的方式
  • event和mutex其实都是在ring0层创建了一个对象。它不仅仅可以用于一个线程内的互斥,也可以用于多个进程之间的线程互斥。

2.mutex跨进程

  • event(事件),semaphore(信号量)mutex(互斥量)都是可以跨进程来进行线程互斥和线程通信的。但是mutex是最安全的,不要选用信号量和事件。
  • 跨进程都必须要有名字,否则找不到。
  • 跨进程时,一定设置一个等待时间,等的时间太久就不要在等了。
  • mutex是一个内核层的对象,哪个进程都可以访问他。

HANDLE mutex = CreateMutex(NULL, TRUE, name) //在内核创建
ReleaseMutex(mutex);    //离开互斥区
HANDLE mutex = OpenMutex(MUTEX_ALL_ACCESS,TRUE,name);    //打开
MUTEX_ALL_ACCESS查找全部

3.使用(两个进程)

mutex1:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h> char name[] = "haihualovefang"; void main()
{
HANDLE mutex = CreateMutexA(NULL, TRUE, name);  //在内核创建
printf("创建成功");
char ch = getch(); ReleaseMutex(mutex);  //离开互斥区
printf("触发互斥量");
CloseHandle(mutex); }

mutex2:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h> char name[] = "haihualovefang"; void main()
{ HANDLE mutex = OpenMutexA(MUTEX_ALL_ACCESS,TRUE,name);
      //MUTEX_ALL_ACCESS查找全部
if (mutex==NULL)
{
printf("打开失败");
system("pause");
return;
}
printf("等待-------");
DWORD res = WaitForSingleObject(mutex, );
switch (res)
{
case WAIT_OBJECT_0:
printf("收到信号-------");
break;
case WAIT_TIMEOUT:
printf("超时没有收到-------");
break;
case WAIT_ABANDONED:
printf("另外一个进程意外终止-------");
break;
default:
break; }
CloseHandle(mutex); system("pause");
}

跨进程的mutex的更多相关文章

  1. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

  2. android不需要Socket的跨进程推送消息AIDL!

    上篇介绍了跨进程实时通讯http://www.cnblogs.com/xiaoxiaing/p/5818161.html 但是他有个缺点就是服务端无法推送消息给客户端,今天这篇文章主要说的就是服务器推 ...

  3. Android随笔之——跨进程通信(一) Activity篇

    在Android应用开发中,我们会碰到跨进程通信的情况,例如:你用QQ通讯录打电话的时候会调用系统的拨号应用.某些新闻客户端可以将新闻分享到QQ.微信等应用,这些都是跨进程通信的情况.简而言之,就是一 ...

  4. android 史上最简单易懂的跨进程通讯(Messenger)!

    不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递m ...

  5. Android中的跨进程调用技术AIDL

    什么是AIDL Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用 ...

  6. umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android

    先简单介绍下5.0版的变化.5.0最大的特色是调用简单,采用了链式语法,形如: new ShareAction(context).setPlatform(share_media) .withText( ...

  7. Android跨进程通信的四种方式

    由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...

  8. WinForm实现跨进程通信的方法

    public class WinMessageHelper { private struct COPYDATASTRUCT { public IntPtr dwData; public int cbD ...

  9. AIDL-Android接口描述语言实现跨进程通讯

    在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享. 因此传递对象, ...

随机推荐

  1. AccessibilityService+WindowManager+SurfaceView开系统权限

    一种通过自动获取用户权限增强产品体验的方法 本文是基于辅助功能+悬浮窗+SurfaceView来实现自动获取用户权限的具体方案设计与实现.辅助功能抢红包插件相信大家并不陌生,但是微信官方不允许,但是在 ...

  2. poj1830:开关问题

    链接:http://poj.org/problem?id=1830 某天“佐理慧学姐”突然来问了我这道题. 诶,窝只会线性基,但是好像搞不了方案数啊…… 啃题解吧. woc!线性代数哦,就是那种我不会 ...

  3. Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】

    校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...

  4. [51nod Round 15 B ] 完美消除

    数位DP. 比较蛋疼的是,设a[i]表示第i位上数字,比方说a[1]<a[2]>a[3],且a[1]==a[3]时,这两位上的数可以放在一起搞掉. 所以就在正常的f数组里多开一维,表示后面 ...

  5. [bzoj3282]Tree (lct)

    昨天看了一天的lct..当然幸好最后看懂了(也许吧..) 论善良学长的重要性T_T,老司机带带我! 这题主要是删边的时候还要判断一下..蒟蒻一开始天真的以为存在的边才能删结果吃了一发wa... 事实是 ...

  6. Centos7搭建Confluence破解版

    Confluence破解版 应用环境: Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki.通过它可以实现团队成员之间的协作和知识共享. 系统及安装软件 centos7 ...

  7. ubuntu sendmail配置发送邮件

    ubuntu中sendmail函数可以很方便的发送邮件,ubuntu sendmail先要安装两个包. 必需安装的两个包: 代码  sudo apt-get install sendmail sudo ...

  8. [20160711][在Windows下调用neven链接库]

    相关说明 这篇文档是接前篇[20160711][neven代码移植Windows]和[20160711][VS2012配置OpenCV2.4.9]下完成,首先需要通过篇文档编译出neven动态链接库和 ...

  9. [国嵌笔记][028][Bootloader设计蓝图]

    Bootloader的作用就是启动Linux内核 U-Boot简介 1.U-Boot是用于多种嵌入式CPU(ARM.x86.MIPS等)的bootloader程序,U-Boot不仅支持嵌入式Linux ...

  10. Dev中GridControl的GridView 基本样式设置

    基本样式图: 代码如下: /// <summary> /// gridView样式 /// </summary> /// <param name="gdv&qu ...