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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值