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()了,这就是执行等待的操作