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

  • 相关阅读:
    经典游戏--24点--c++代码实现和总体思路(简单暴力向)
    这么多TiDB负载均衡方案总有一款适合你
    思杰( Citrix)证书的正确处置方式
    从本质彻底精通Git——4个模型1个周期1个史观1个工作流
    HttpClient客户端网络编程——高可用、高并发
    Netty之数据编码
    维吉尼亚密码加解密原理及其实现
    无网环境安装docker之--rpm
    centos7无网环境安装docker
    CentOS8.3最小化安装后安装GNome桌面
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/1050473.html
Copyright © 2011-2022 走看看