多线程之临界区、互斥锁

本文介绍了一个使用互斥锁管理共享资源的并发售票系统,通过控制售票员操作以确保资源安全访问,避免了数据冲突。

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

互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源,无序的。


// 线程.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>

int k = 0;
int i = 0,j = 0;
int conductor_a=0,conductor_b=0,conductor_c=0,conductor_d=0;

CRITICAL_SECTION cs;

void thread(void *a)
{
     k++;
     int man = k;

   while (1)
   {
       Sleep(1);
       EnterCriticalSection(&cs);
       if( i > 99)
       {
           if (0 == j)
           {
                printf("1:%d  2:%d  3:%d  4:%d \n",conductor_a,conductor_b,conductor_c,conductor_d);
                j = 1;
           }
          
           break;
       }
       else
       {
           i++;
           printf("售票员%d 卖出座位号:%d\n",man,i);
           switch(man)
           {
             case 1:conductor_a++;break;
             case 2:conductor_b++;break;
             case 3:conductor_c++;break;
             case 4:conductor_d++;break;
           }
       }
       LeaveCriticalSection(&cs);
   }
 
}

int main(int argc, char* argv[])
{
    
    InitializeCriticalSection(&cs);
    HANDLE    hThred[4];
    EnterCriticalSection(&cs);
    for(int i = 0; i < 4 ; i ++)
    {
        hThred[i] = CreateThread(  0, 0, (LPTHREAD_START_ROUTINE)thread, 0, 0, 0 );
    }
    LeaveCriticalSection(&cs);
    WaitForMultipleObjects(4,hThred,true,0xFFFFFFFF);
    while(1);
    
    //DeleteCriticalSection(&cs);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值