您的位置:首页 > 编程语言 > C语言/C++

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;

}

通过以上代码就可以实现进程或者说线程间的同步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐