zoukankan      html  css  js  c++  java
  • 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           //给某个变量啬某个特定值

  • 相关阅读:
    一款简单易用的.Net 断言测试框架 : Shouldly
    单元测试 使用 Effort 内存数据库 报错
    解决 对路径bin oslyn..的访问被拒绝
    数据库设计:多选查询与匹配
    oracle快速创建主键
    models中,字段参数limit_choices_to的用法
    models中,对于(Small)IntegerField类型字段的choices参数在前端的展示
    Django ModelForm组件
    会议室预定
    Django admin管理工具
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/1050473.html
Copyright © 2011-2022 走看看