zoukankan      html  css  js  c++  java
  • Windows环境下多线程编程原理与应用读书笔记(6)————临界段及其应用

    <一>临界段

           临界段对象通过提供所有线程必须共享的对象来控制线程。只有拥有临界段对象的线程才能够访问保护的资源。在另一个线程可以访问该资源之前,前一线程必须释放临界段对象,一遍新的线程可以获取对对象的访问权。

    注意:互斥量是内核对象,可以跨进程使用,而临界段对象只能在进程内的线程间使用(虽然互斥量可以用于进程内的线程,但线程间的通信,互斥量没有临界段对象高效)。

    与临界段有关的API函数

    名称 作用
    InitializeCriticalSection() 创建一个临界段
    DeleteCriticalSection() 释放一个临界段
    EnterCriticalSection() 获取对临界段的所有权,独占共享资源
    TryEnterCriticalSection() 试图获得对临界段的所有权,但不阻塞
    LeaveCriticalSection() 释放对资源的所有权

    例子:

    #include <iostream>
    #include <windows.h>
    #include "process.h"
    using namespace std;
    
    CRITICAL_SECTION cs;
    
    int a[5],i;
    
    void Thread()
    {
        int num=0;
        while(true)
        {
            EnterCriticalSection(&cs);
            for (i=0;i<5;i++)
            {
                a[i]=num;
            }
            LeaveCriticalSection(&cs);
            num++;
        }
    }
    
    int main()
    {
        InitializeCriticalSection(&cs);
        CreateThread(0,0,(LPTHREAD_START_ROUTINE)Thread,0,0,0);
        while(true)
        {
            EnterCriticalSection(&cs);
            for (i=0;i<5;i++)
            {
                cout<<a[i]<<"  ";
            }
            LeaveCriticalSection(&cs);
            
        } 
        return 0;
    }

      

  • 相关阅读:
    flash中网页跳转总结
    as3自定义事件
    mouseChildren启示
    flash拖动条移出flash无法拖动
    需要一个策略文件,但在加载此媒体时未设置checkPolicyFile标志
    Teach Yourself SQL in 10 Minutes
    电子书本地转换软件 Calibre
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes – Page 31 练习
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/3384893.html
Copyright © 2011-2022 走看看