C++使用临界区实现进程同步
2012-02-15 22:04
309 查看
进程同步在多线程应用程序中是非常重要的,实现进程同步也有很多方法,可以利用互斥锁,可以利用事件,这两种方法可以查阅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;
}
通过以上代码就可以实现进程或者说线程间的同步
#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;
}
通过以上代码就可以实现进程或者说线程间的同步
相关文章推荐
- 使用临界段原理实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现 (转)
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用信号signal,实现进程之间的同步
- 共享内存多进程间通信,进程间同步使用信号量来实现
- 进程通信之一 使用WM_COPYDATA C++及C#实现
- C++ 进程间共享内存-实现进程同步
- C#使用互斥量(Mutex)实现多进程并发操作时多进程间线程同步操作(进程同步)的简单示例代码及使用方法
- 共享内存多进程间通信,进程间同步使用信号量来实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用共享实现两个进程之间的聊天-使用有名信号量实现同步
- Python使用文件锁实现进程间同步功能【基于fcntl模块】
- 使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- linux下使用C或C++实现进程管理代码
- MFC使用CEF并实现js与C++交互功能,解决Render进程中OnContextCreated绑定与OnWebKitInitialized的js扩展无法回调问题
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- 使用临界段实现优化的进程间同步对象-原理和实现