windows 线程同步(线程同步windows平台)

 2025-10-26  阅读 367  评论 0

摘要:一:介绍临界区指的是一个访问共用资源(例:全局变量)的程序片段,该共用资源无法同时被多个线程访问的特性。有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资
一:介绍

临界区指的是一个访问共用资源(例:全局变量)的程序片段,该共用资源无法同时被多个线程访问的特性。有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。

临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection()和LeaveCriticalSection()函数去标识和释放一个临界区。所用到的CRITICAL_SECTION结构对象必须经过InitializeCriticalSection()的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。否则临界区将不会起到应有的作用,共享资源依然有被破坏的可能。

二:步骤
  1. 创建临界区对象:CRITICAL_SECTION critical
  2. 初始化临界区:InitializeCriticalSection(&critical)
  3. 进入临界区:EnterCriticalSection(&critical)
  4. 释放临界区:LeaveCriticalSection(&critical)
三:代码实现

1 /******************************************************** 2 Copyright (C), 2016-2018, 3 FileName: t12 4 Author: woniu201 5 Email: wangpengfei.201@163.com 6 Created: 2018/10/23 7 Description: 线程同步-临界区 8 ********************************************************/ 9 #include <iostream> 10 #include <Windows.h> 11 using namespace std; 12 13 volatile int number = 1; 14 CRITICAL_SECTION critical; //临界区句柄 15 16 DWORD CALLBACK ThreadFun1(LPVOID pParam) 17 { 18 while (1) 19 { 20 EnterCriticalSection(&critical); 21 cout << "Thread1:" << number << endl; 22 if (number >= 1000) 23 { 24 break; 25 } 26 LeaveCriticalSection(&critical); 27 } 28 29 return 0; 30 } 31 32 DWORD CALLBACK ThreadFun2(LPVOID pParam) 33 { 34 while (1) 35 { 36 EnterCriticalSection(&critical); 37 cout << "Thread2:" << number << endl; 38 LeaveCriticalSection(&critical); 39 if (number >= 1000) 40 { 41 break; 42 } 43 } 44 return 0; 45 } 46 47 48 int main() 49 { 50 InitializeCriticalSection(&critical); 51 CreateThread(NULL, 0, ThreadFun1, NULL, 0, NULL); 52 CreateThread(NULL, 0, ThreadFun2, NULL, 0, NULL); 53 54 getchar(); 55 return 1; 56 }

windows 线程同步(线程同步windows平台)(1)

,

版权声明:xxxxxxxxx;

原文链接:http://cn.tdroid.net/ce456Cz0GAwECXlQ.html

发表评论:

管理员

  • 内容326529
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:
注册登录
注册帐号
登录帐号

Copyright © 2022 太卓开发网 Inc. 保留所有权利。 泰达科技网易库网

页面耗时0.1194秒, 内存占用1.34 MB, 访问数据库18次