多进程,多线程在 Window 和 Unix 下的通信,同步与互斥

        Window 环境:

1. 多进程通信:匿名管道,命名管道,共享内存,文件映射,邮件槽,剪贴板,动态数据交换,对象连接和嵌入,动态连接库,远程过程调用,NetBios函数,Sockets, WM_COPYDATA消息。

参考: http://www.cnblogs.com/erwin/archive/2007/04/16/715084.html

2. 多线程通信方式:同一进程时,可用全局变量;通过线程句柄发送消息(不同进程的同一线程句柄值是否表示同一个线程)。

3. 多线程同步:事件,信号量,互斥量(也可用于多进程),临界区间,互锁访问(原子访问)。

参考:http://www.kuqin.com/windows/20070908/943.html

  • 3.1. 事件(Event)
  1. 事件处于激发状态(signaled or true)或未激发状态(unsignaled or false)。
  2. 根据状态变迁方式,事件分为 手动设置(SetEvent 和 ResetEvent 来设置状态)和自动设置      (事件处理后,自动回复到没有时间状态)。
  3. 创建事件函数:CreateEvent,返回事件句柄,参数包括状态设置方式,初始状态,事件名称。
  4. event 对象属于内核对象,所以进程 B 可通过事件名调用进程 A 中 event 对象的句柄(OpenEvent)。这个句柄用于 ResetEvent,SetEvent,WaitForMultipleObjects 函数中。
  • 3.2. 临界区(Critical section)

   1.定义临界区变量 CRITICAL_SECTION gCriticalSection;

   2.Critical Section 不是 OS 核心对象,不能跨进程,如果进入临界区的线程“挂”了,将无法释放临界资源。这个缺点在 Mutex 中得到了弥补。 

 函数功能 函数名
 初始化临界区 initializeCriticalSection;
 删除临界区 DeleteCriticalSection
 进入临界区  EnterCriticalSection
 离开临界区 LeaveCriticalSection
 临界区使用方法:

 void UpdateData()
{
 EnterCriticalSection(&gCriticalSection);
 ...//do something
 LeaveCriticalSection(&gCriticalSection);
}

 

  • 3.3.互斥量(mutex)

   互斥(Mutex)内核对象能够确保线程拥有对单个资源的互斥访问权。

   1.Mutex 是核心对象,可以跨进程访问。 

 

 函数功能 函数名
 创建 CreateMutex
  
  

 

   互斥对象的行为特征与临界区相同,但是互斥对象属于内核对象,而临界区则属于用户方式对象,因此导致Mutex 与 Critical Section 的如下不同

多进程,多线程在 <wbr>Window <wbr>和 <wbr>Unix <wbr>下的通信,同步与互斥

  3.4.信号量(Semaphore)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值