C++使用临界区实现进程同步
来源:互联网 发布:广州旅游数据 编辑:程序博客网 时间:2024/04/30 02:53
进程同步在多线程应用程序中是非常重要的,实现进程同步也有很多方法,可以利用互斥锁,可以利用事件,这两种方法可以查阅MSDN相关部分,主要看如何利用临界区实现进程同步
#include <Windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI threadFun1(
LPVOID lpParameter // 线程1的线程函数声明
);
DWORD WINAPI threadFun2(
LPVOID lpParameter // 线程2的线程函数声明
);
int tickets=100;//火车站的总票数
CRITICAL_SECTION g_cs;//临界区的参数
///////////////////////////////////////////////////////////////////////
//名称:main//
//功能:用两个线程模拟火车站的售票系统,并用临界区实现线程的同步//
//////////////////////////////////////////////////////////////////////
void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,threadFun1,NULL,0,NULL);
HANDLE hThread2;
hThread2=CreateThread(NULL,0,threadFun2,NULL,0,NULL);
CloseHandle(hThread1);//创建线程1
CloseHandle(hThread2);//创建现成
InitializeCriticalSection(&g_cs);//初始化临界区
Sleep(4000);//主程序睡眠4秒,使线程函数得以运行
DeleteCriticalSection(&g_cs);//程序执行完毕,销毁临界区
}
DWORD WINAPI threadFun1(LPVOID lpParameter) // 线程1
{
while(TRUE)
{
EnterCriticalSection(&g_cs);//申请进入临界区
if(tickets>0)
{
Sleep(1);
cout<<"Thread1 sells ticket:"<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_cs);//释放临界区资源
}
return 0;
}
DWORD WINAPI threadFun2(LPVOID lpParameter) // 线程2
{
while(TRUE)
{
EnterCriticalSection(&g_cs);//申请进入临界区
if(tickets>0)
{
Sleep(1);
cout<<"Thread2 sells ticket:"<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_cs);//释放临界区资源
}
return 0;
}
通过以上代码就可以实现进程或者说线程间的同步
- C++使用临界区实现进程同步
- C++【线程同步】-临界区同步
- 使用临界区对象实现读,写线程同步
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 临界区实现线程同步互斥
- 多线程实现线程同步~~临界区对象
- 多线程实现线程同步~~临界区对象
- 线程同步:临界区的使用
- 使用临界区机制同步线程
- 进程间同步临界区的Peterson算法
- 进程、线程同步互斥学习 —— 临界区
- 进程同步02--临界区问题(Critical Section Problem)
- 进程同步--临界区保护(1)_轮转法
- JBOSS5.1运行一段时间后挂掉解决思路
- 基于UDP的控制台聊天程序
- Myeclipse中配置JDK环境变量
- 多线程聊天室的实现 C++
- xml解析时出现的莫名异常 不影响运行·
- C++使用临界区实现进程同步
- Java第一课 Java的一些基本概念,Java的起源、为什么我们要学习Java语言,Java跨平台原理剖析;Java环境变量的配置,初学者常犯的问题,Java语言的基本数据类型和Java的语句。
- oralce06
- Unicode编码解释UCS、UTF、BMP、BOM
- 动态代理和静态代理以及spring的aop
- 网页讲究2
- 核心对象
- 1.3.1
- clock 时间