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

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

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

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

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

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

下面就是我写的代码

主要实现一个功能:

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;
}


 

 

 

 

 


 

 

 

你可能感兴趣的:(线程同步--关键代码段(二))