⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 criticalsection.cpp

📁 验证进程同步的信号量方法的C程序
💻 CPP
字号:
#include <stdio.h> 
#include <windows.h> 
#include <iostream.h>
#include <winbase.h> 
#define THREAD_INSTANCE_NUMBER	3

//全局变量
int iCounter=0;
CRITICAL_SECTION criCounter;

DWORD SubThread(void * pD)
{
	int iTemp=(int)pD;
		cout << "SubThread"  << iTemp << endl;
	for(int i=0;i<8;i++)
	{
		EnterCriticalSection(&criCounter);
		int iCopy=iCounter;
		Sleep(100);
		iCounter=iCopy+1;
		printf("thread %d : %d\n",iTemp,iCounter);
		LeaveCriticalSection(&criCounter);
	}
	return 0;
}

void main(void)
{
    cout << "CreateThread" << endl;

	// Create a thread;
	DWORD IDThread[THREAD_INSTANCE_NUMBER]; 
   	HANDLE hThread[THREAD_INSTANCE_NUMBER];
	int i;
		//创建临界区
		InitializeCriticalSection(&criCounter);
		//创建线程
	for (i=0;i<THREAD_INSTANCE_NUMBER;i++)
	{
		hThread[i] = CreateThread(NULL, // no security attributes 
	         0,                           // use default stack size 
	         (LPTHREAD_START_ROUTINE) SubThread, // thread function 
	         (void *)i,                    // no thread function argument 
	         0,                       // use default creation flags 
	         &(IDThread[i]));              // returns thread identifier 
		
		// Check the return value for success. 
		if (hThread[i] == NULL)
			cout << "CreateThread error" << i << endl;
			else
			cout << "CreateThread: " << i << endl;
	
}
		//等待线程结束
		WaitForMultipleObjects(THREAD_INSTANCE_NUMBER,hThread,TRUE,INFINITE);
		//删除临界区
		DeleteCriticalSection(&criCounter);
		printf("\nover\n");
	Sleep(5000);
return ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -