windows ce 线程同步

 

Mutex

互斥,同时只有一个线程可以有Mutex对象。

HANDLE CreateMutex()

ReleaseMutex();

使用WaitForSingleObject等待。

Semaphore

   emaphore中文通常译为信号灯。通常可以把Semaphore理解成是带有引用计数的MutexSemaphore用于某些共享资源同时只能被固定数量的线程使用的情况。

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的计数大于0Semaphore处于通知状态;否则处于未通知状态。

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           //给某个变量啬某个特定值

posted on 2008-01-23 18:50  山本二十八  阅读(1096)  评论(0编辑  收藏  举报

导航