多线程编程之一:关键段的使用
来源:互联网 发布:软件代理赚钱吗 编辑:程序博客网 时间:2024/05/18 02:10
用下面这段代码说明多线程同步中“关键段”的使用:
#include "stdafx.h"#include <windows.h>#include <process.h>#include <iostream>using namespace::std;const int COUNT = 1000;int g_nSum = 0;CRITICAL_SECTION g_cs;unsigned int __stdcall FirstThread(PVOID pvParam){EnterCriticalSection(&g_cs);g_nSum = 0;for (int n = 1; n <= COUNT; n++){cout << "--------------add in FirstThread-------------\n" << endl;g_nSum += n;}LeaveCriticalSection(&g_cs);return(g_nSum);}unsigned int __stdcall SecondThread(PVOID pvParam){EnterCriticalSection(&g_cs);g_nSum = 0;for (int n = 1; n <= COUNT; n++){cout << "--------------add in SecondThread-------------\n" << endl;g_nSum += n;}LeaveCriticalSection(&g_cs);return(g_nSum);}int main(){InitializeCriticalSection(&g_cs); HANDLE h1, h2;h1 = (HANDLE)_beginthreadex(NULL, 0, FirstThread, NULL, 0, NULL);h2 = (HANDLE)_beginthreadex(NULL, 0, SecondThread, NULL, 0, NULL);WaitForSingleObject(h1, INFINITE);WaitForSingleObject(h2, INFINITE);cout << g_nSum << endl;DeleteCriticalSection(&g_cs); return 0;}
转:所谓的“关键段”一般称为临界区,是实现进程内多线程互斥的常用方法。所谓“争夺关键段”就是一个线程以进入临界区(尚未离开),而又有其它线程要进入临界区。在首次发生“争夺”时,程序会自动创建一个内核事件,并等待该事件状态,当前一个线程离开临界区时会设置该事件通知正在等待的线程。若再次发生“争夺”,则利用前面已经创建的内核事件,无须再创建。等待和设置内核对象需要的时间较长,而很多情况下,线程间并不会出现“争夺关键段”的情况,所以利用临界区实现线程互斥比直接使用内核事件效率高。
阅读全文
1 0
- 多线程编程之一:关键段的使用
- 多线程 -- 关键段
- 关键代码段(CriticalSection)的使用
- 多线程之CS(关键段)
- 【多线程】(四)关键段CS
- 多线程14: 关键段,事件,互斥量,信号量的“遗弃”问题
- 用户模式下的多线程同步——关键段
- 多线程篇(二)——线程之间的同步与互斥,关键段的使用
- 多线程编程Demo[关键代码段[临界区]实现线程同步]
- C++多线程编程例子 Demo 关键代码段 临界区 实现线程同步
- 利用关键代码段实现多线程同步
- 多线程第三篇:关键段(临界区)
- 白话windows多线程同步之关键段
- Windows多线程(三) 关键段 CS
- 多线程之关键段(临界区)
- 《多线程编程》学习之一:使用多线程及线程安全
- windows核心编程-关键段与SRWLock
- 多线程编程之一
- 类装载器
- VM VirtualBox配置linux桥接网络,让虚拟机能够上网
- csu1115(字典树)最短的名字
- ajaxd的js和jquery实现
- SpringDemo ----- 扫描注入
- 多线程编程之一:关键段的使用
- bzoj1300: [LLH邀请赛]大数计算器
- 关于垂直居中
- 矩阵快速幂取模--cf678d Iterated linear function
- html5中页面拨打电话的方式
- C++ 智能指针详解
- 【C++】new和delete面对简单类型时可以不成对使用的原因
- C++ sort排序函数用法
- 如何玩转zk来做分布式编程