多线程应用——(四)

本文深入探讨了多线程环境下临界区的概念及其在保护全局变量免受并发访问冲突的重要作用。通过使用Windows API函数如CreateThread和CRT函数如_test,展示了如何在Windows系统中实现线程安全的操作。重点介绍了临界区结构体CRITICAL_SECTION的使用方法,以及初始化、进入和退出临界区的步骤,同时讨论了同步技术在解决多线程访问冲突问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:1.多线程在访问同一个变量或同一块区域时要使用临界区
2.临界区内最多线程数目是64
3.windows 下,CreateThread(WinAPI函数)与临界区相关的函数匹配使用
4._beginthread函数是CRT(C Running Time)相关函数

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<process.h>
#include <time.h>
#define THREAD_NUM 64 //临界区线程数最大是64
int num = 0;

CRITICAL_SECTION cs;  //定义临界区,结构体变量

DWORD WINAPI test(void * p)
{
    EnterCriticalSection(&cs);
    for (int i = 0; i < 100; i++)
    {
        num++;
    }
    LeaveCriticalSection(&cs);

    return 0;
}

void main()
{
    InitializeCriticalSection(&cs);//初始化临界区

    HANDLE hd[THREAD_NUM];
    for (int i = 0; i < THREAD_NUM; i++)
    {       
        hd[i] = CreateThread(NULL, 0, test, NULL, 0, NULL);
        //WaitForSingleObject(hd[i], INFINITE);//解决多线程对全局变量的访问冲突问题,方法一:使用同步技术,缺点是单个线程的执行时间不宜太长
    }

    WaitForMultipleObjects(THREAD_NUM, hd, TRUE, INFINITE);

    printf("%d\n", num);
    DeleteCriticalSection(&cs);
    getchar();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值