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

  • 相关阅读:
    从零基础到精通的前端学习路线
    js点击弹出网页弹框
    JS实现在线统计一个页面内鼠标点击次数-刷新过后也会保留上次点击次数
    Input文本框随着输入内容多少自动延伸有-bug
    关于Java 后台分页
    关于ECMAScript6 的学习01-ES6 的六种变量声明方式===关于常量const
    关于ECMAScript6 的学习01-ES6 的六种变量声明方式===关于块级变量 let
    接上篇 checkbox数据的带入
    关于checkbox 样式的改变 设置自定义样式
    关于文件上传-图片上传
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/1050473.html
Copyright © 2011-2022 走看看