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