同步的互斥

     CE中已经实现了多线程,分时共享技术,这样可以大提高整个系统的资源使用率。但多线程的使用中必然会碰到共享的资源使用情况,为防止共享资源造成的死锁,所以多个线程之间经常要同步它们 的一些操作。CE有三种内核机制来实现线程之间的同步,它们是:Mutex,Event和Semaphore。

 

     先说一下Mutex,也就是互斥。打比方,一层楼有一个间洗手间,如果我们想要WC的时候,只能一个人使用,另外的人想要使用就只能等待前面的人出来了。也就是多个线程的共享资源只能被一个线程使用,其它线程想要占有Mutex,必须等待占有者释放。

 

下面来看我碰到的一段代码:

 

 

 hMutex[index] = CreateMutex( NULL, FALSE, OEM_MUTEX_GPIO[index]);
  if (hMutex[index] == NULL)
  {
   DEBUGMSG(GPIODEBUG, (_T(" MutexGPIO: Create Mutex Failure. %d/r/n"), index));
   RETAILMSG(1, (_T(" MutexGPIO: Create Mutex Failure. %d/r/n"), index));
   return CFALSE;
  }else if(ERROR_ALREADY_EXISTS == GetLastError ())
  {
   DEBUGMSG(ZONE_INIT, (_T("CreateMutex opened existing mutex. %d/r/n"), index));
  }

 

首先创建一个互斥体,如果为空就返回,返回值为ERROR_ALREADY_EXISTS,就表示有一个已经存在的Mutex了

 

HANDLE CreateMutex( 
  LPSECURITY_ATTRIBUTES lpMutexAttributes, //这里只能为空,CE不支持
  BOOL bInitialOwner,       //是否创建拥有它的线程
  LPCTSTR lpName           //可以为空,Mutex 的名称
);
假如你线程用到了Mutex的话,那就得使用WaitForSingleObject()了,这就是执行等待的操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值