vc 多线程处理临界数据,

本文展示了如何在VC中使用多线程处理临界数据,通过创建线程并利用互斥量(Mutex)和关键段(CRITICAL_SECTION)来确保线程安全。示例代码中创建了四个线程,并在`sumSub`函数中使用关键段来减小共享变量`sum`,防止数据竞争。

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

#include <iostream>
#include <Windows.h>
using namespace std;
int sum = 100;
DWORD WINAPI threadfun(LPVOID lpParameter);
int temp =1;
HANDLE m_mutex;
HANDLE handle1;
HANDLE handle2;
HANDLE handle3;
HANDLE handle4;
CRITICAL_SECTION g_cs;
int main()
{
    char pmsg1[10] = "hello_1\n";
    char pmsg2[10] = "hello_2\n";
    char pmsg3[10] = "hello_3\n";
    char pmsg4[10] = "hello_4\n";
    // m_mutex = ::CreateMutex(NULL, FALSE, NULL);
    // if(!m_mutex)cout<<"CreateMutex fail"<<endl;
     handle1 = CreateThread(NULL,0,threadfun,(void*)pmsg1,0,NULL);
     handle2 = CreateThread(NULL,0,threadfun,(void*)pmsg1,0,NULL);
     handle3 = CreateThread(NULL,0,threadfun,(void*)pmsg1,0,NULL);
     handle4 = CreateThread(NULL,0,threadfun,(void*)pmsg1,0,NULL);

    CloseHandle(handle1);
    CloseHandle(handle2);
    CloseHandle(handle3);
    CloseHandle(handle4);
//    ::CloseHandle(m_mutex);

    getchar();
    return 0;
}

void sumSub()
{
        InitializeCriticalSection(&g_cs);
        Sleep(2);
    while(sum > 0)
    {    
        EnterCriticalSection(&g_cs);
        cout << "tid: " << GetCurrentThreadId() << "\tsum: " << sum-- << endl;
        LeaveCriticalSection(&g_cs);
        Sleep(3);
        
    }

}
DWORD WINAPI threadfun(LPVOID lpParameter)
{
    /*char* pmsg = (char*)lpParameter;
    cout<<pmsg;*/

    sumSub();
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值