多线程之临界区、互斥锁
2016-04-05 16:33
309 查看
互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源,无序的。
// 线程.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;
}
// 线程.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;
}
相关文章推荐
- java中HashMap简单使用
- jsp显示时间12小时和24小时问题
- C语言 fork()笔试题
- 冒泡排序
- Android 简单三级文字列表
- mysql死锁分析
- spring cache
- 面试题二: java 实现二叉树的中序优先遍历,不能用递归
- 二叉树前序、中序和后序遍历相互求法
- 关于 less 变量
- adb logcat 命令行用法
- linux命令--tar
- json字符串和对象之间的转换
- ORA-01017 DATAGUARD中sqlplus连不到备库
- spring事务管理
- html表单,(内联)框架,背景,颜色
- LVS负载均衡集群(干货来袭)
- 20160404作业
- JavaScript数组去重的两种方法推荐
- 【多重背包】 big event in HDU 外加 输入挂写法