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

      

  • 相关阅读:
    servlet&jsp高级:第四部分
    servlet&jsp高级:第三部分
    servlet&jsp高级:第二部分
    servlet&jsp高级:第一部分
    Servlet&jsp基础:第四部分
    Servlet&jsp基础:第三部分
    Servlet&jsp基础:第二部分
    Servlet&jsp基础:第一部分
    关于各地区并发高的解决思路
    Intellij IDEA使用restclient测试
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/3384893.html
Copyright © 2020-2023  润新知