在我们接触到的多线程书籍里面,提到最多的就是线程同步问题了。
但是,我们看到最多的例子也是对一个临界资源的访问。
但是当我们自认为感觉靴子很好的时候,问题出现了,怎么才能够使我们让线程按照一定的顺序访问。
其实我们学习的东西就已经可以使用了,只是我们受到书籍的影响导致我们写不出来而已。
当然,学习多线程,操作系统学习是避免不了的!
下面就是我写的代码
主要实现一个功能:
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;
}