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

  • 相关阅读:
    Java线程中带有返回值的线程Callable
    Android 子线程测试
    JAVA下的Thread.sleep方法一定要try
    解决Android Studio 和 Android SDK Manager 无法在线更新的问题.
    asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案
    git 使用2
    前端vue组件传参
    微信小程序 路由跳转 异步请求 存储数据,微信登录接口
    微信小程序 基本介绍及组件
    安装虚拟机
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/1050473.html
Copyright © 2011-2022 走看看