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;
    }

      

  • 相关阅读:
    MyEclipse修改默认的workspace路径
    对象池化技术 org.apache.commons.pool
    Java 简单工厂模式
    组装品入力
    引当日数和JAN日数的意思
    材料构成模块的做法
    在库移动和在库振替的意思
    组装品的特殊式样
    设计的尝试数据库・数据的更新
    定时器(Timer)文章收集转载(小雨论坛)
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/3384893.html
Copyright © 2011-2022 走看看