windows ce 线程同步
Mutex
互斥,同时只有一个线程可以有Mutex对象。
HANDLE CreateMutex()
ReleaseMutex();
使用WaitForSingleObject等待。
Semaphore
emaphore中文通常译为信号灯。通常可以把Semaphore理解成是带有引用计数的Mutex。Semaphore用于某些共享资源同时只能被固定数量的线程使用的情况。
CreateSemaphore(NULL,LONG lInitialCount,LONG lMaxinumCount,LPCTSTR lpName)
ReleaseSemaphore(
HANDLE hSemaphore,//要释放的句柄
LONG lReleaseCount,//释放的引用计数个数
LPLONG lpPreviousCount//返回释放前的Semaphore计数
);
使用CreateSemaphore()O函数创建Semaphore时,可使用第3个参数来指定最多可有多少个线程占有该Semaphore对象。同时,还可使用第2个参数给Semaphore对象一个初始计数。当有纯种使用ReleaseSemaphore()函数释放Semaphore时,该初始值lReleaseCount;当有线程使用等待函数有Semaphore时,该初始值减1。因此,如果Semaphore的计数大于0,Semaphore处于通知状态;否则处于未通知状态。
Event
Critical Section
除些之外Windows ce还提供了两种用户态下的同步方法:Critical Section和互锁函数。这两种方法都没有相对应的windows ce 内核对象,因此它们不能跨纯种,但优点是运行效率要远远比前面的几种同步对象高。
Critical Section是应用程序分配的一个数据结构。它用来把一段代码标记为临界区。临界区可保证对其内部的访问是串行的。如果临界区并没有导致线程阻塞,那么Critical Section的效率非常高,因为代码不须进入操作系统内核;如果临界区导致了阻塞,临界区使用与Mutex相同的机制。
InitializeCriticalSection();
EnterCriticalSection,TryEnterCriticalSection,LeaveCriticalSection,DeleteCriticalSection
互锁函数
互锁函数可对变量和指针进行原子的读/写操作。因为它们不需要额外的同步对象,所以有时这些互锁函数特别有用。Windows ce提供的互锁函数有:
InterlockedIncrement //把一个变量的值加1
InterlockedDecrement
InterlockedExchange //交换两个变量的值
InterlockedTestExchange //根据条件交换变量的值
InterlockedCompareExchange //根据比较原子交换
InterlockedCompareExchangePointer //根据比较原子交换指针
InterlockedExchangePointer //交换两个指针的值
InterlockedExchangeAdd //给某个变量啬某个特定值