线程同步--关键代码段(二)

在我们接触到的多线程书籍里面,提到最多的就是线程同步问题了。

但是,我们看到最多的例子也是对一个临界资源的访问。

但是当我们自认为感觉靴子很好的时候,问题出现了,怎么才能够使我们让线程按照一定的顺序访问。

其实我们学习的东西就已经可以使用了,只是我们受到书籍的影响导致我们写不出来而已。

当然,学习多线程,操作系统学习是避免不了的!

下面就是我写的代码

主要实现一个功能:

A和B必须同时打印。单独出现AA不行,单独出现BB也不可以。

#include <iostream>
#include <windows.h>
using namespace std;

CRITICAL_SECTION cs[2];

DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
	while (1)
	{
		
		EnterCriticalSection(&cs[0]);
		cout<<"A\n";
		LeaveCriticalSection(&cs[1]);
		Sleep(1000);
	}
	return 0;
}

DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
	while (1)
	{
		
		EnterCriticalSection(&cs[1]);
		cout<<"B\n";
		LeaveCriticalSection(&cs[0]);
		Sleep(1000);
	}
	return 0;
}

int main()
{
	InitializeCriticalSection(&cs[0]);
	InitializeCriticalSection(&cs[1]);

	HANDLE hand[2];
	
	hand[0] =  CreateThread( NULL , NULL ,ThreadProc1 , NULL , 0 , NULL )	;
	hand[1] =  CreateThread( NULL , NULL ,ThreadProc2 , NULL , 0 , NULL )	;

	WaitForSingleObject(hand[0] , INFINITE );
	WaitForSingleObject(hand[1], INFINITE);

	DeleteCriticalSection(&cs[0]);
	DeleteCriticalSection(&cs[1]);
	CloseHandle(hand[0]);
	CloseHandle(hand[1]);
	return 0;
}


 

 

 

 

 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值