zoukankan      html  css  js  c++  java
  • 互斥量Mutex

    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    DWORD WINAPI MyThreadProc1(LPVOID lpParameter);		//thread data
    DWORD WINAPI MyThreadProc2(LPVOID lpParameter);
    
    DWORD WINAPI MyThreadProc3(LPVOID);		//thread data
    DWORD WINAPI MyThreadProc4(LPVOID);
    
    int tickets=100;
    HANDLE hMutex;
    
    int main(){
    
    	DWORD tid1=0,tid2=0;
    	//HANDLE handle = CreateThread(NULL,0,MyThreadProc,NULL,0,&tid);
    
    	HANDLE handle1 = CreateThread(NULL,0,MyThreadProc1,NULL,CREATE_SUSPENDED ,&tid1);		
    	HANDLE handle2 = CreateThread(NULL,0,MyThreadProc2,NULL,CREATE_SUSPENDED ,&tid2);
    
    	ResumeThread(handle1);	
    	ResumeThread(handle2);	
    
    	/*
    	  int i = 0;
    	  for(;i<100;i++)		
    		cout<<"Main thread is running"<<endl;
    	*/
    	
    	hMutex = CreateMutex(NULL,FALSE,NULL);
    
    	Sleep(8000);
    
    	CloseHandle(handle1);
    	CloseHandle(handle2);
    
    	cout<< "SubThread1 ID:" << hex << uppercase<< tid1 << endl;
    	cout<< "SubThread2 ID:" << hex << uppercase<< tid2 << endl;
    
    	cout<<"**************************************************"<<endl;
    
    	HANDLE handle3 = CreateThread(NULL,0,MyThreadProc3,NULL,0 ,&tid1);		
    	HANDLE handle4 = CreateThread(NULL,0,MyThreadProc4,NULL,0 ,&tid2);
    	CloseHandle(handle3);
    	CloseHandle(handle4);
    
    	system("pause");
    	return 0;
    }
    
    /*
    WAIT_OBJECT_0 The state of the specified object is signaled. 
    WAIT_TIMEOUT The time-out interval elapsed, and the object's state is nonsignaled. 
    
      */
    DWORD WINAPI MyThreadProc1(
    						  LPVOID lpParameter   // thread data
    )
    {
    	//Sleep(20);
    	//int i=0;
    	
    	while(tickets>0){
    		//WaitForSingleObject(hMutex,INFINITE);
    		DWORD dwCode = WaitForSingleObject(hMutex,5);
    		if(dwCode == WAIT_TIMEOUT){
    			cout<<endl<<"子线程1 等待超时"<<endl;
    			continue;
    		}
    		cout<<"子线程1卖票:"<<tickets<<endl;
    		--tickets;
    		Sleep(15);
    		ReleaseMutex(hMutex);
    		
    	}
    
    	return 1;
    }
    
    
    
    DWORD WINAPI MyThreadProc2(
    						  LPVOID lpParameter   // thread data
    						  )
    {
    	//Sleep(20);
    	//int i=0;
    	while(tickets>0){
    		//WaitForSingleObject(hMutex,INFINITE);
    		DWORD dwCode = WaitForSingleObject(hMutex,5);
    		if(dwCode == WAIT_TIMEOUT){
    			cout<<endl<<"子线程2 等待超时"<<endl;
    			continue;
    		}
    		cout<<"子线程2卖票:"<<tickets<<endl;
    		--tickets;
    		Sleep(15);
    		ReleaseMutex(hMutex);
    		
    	}
    		
    	return 1;
    }
    
    
    DWORD WINAPI MyThreadProc3( LPVOID lpParameter )
    {	
    	DWORD dwCode = WaitForSingleObject(hMutex,5);
    	if(dwCode == WAIT_TIMEOUT){
    		cout<<endl<<"子线程3 等待超时"<<endl;
    	}
    	else if(dwCode == WAIT_ABANDONED){
    		cout<<endl<<"子线程3 WAIT_ABANDONED"<<endl;
    	}
    	cout<<"子线程3运行"<<endl;
    	return 1;
    }
    DWORD WINAPI MyThreadProc4( LPVOID lpParameter )
    {	
    	DWORD dwCode = WaitForSingleObject(hMutex,5);
    	if(dwCode == WAIT_TIMEOUT){
    		cout<<endl<<"子线程4 等待超时"<<endl;		
    	}
    	else if(dwCode == WAIT_ABANDONED){
    		cout<<endl<<"子线程4 WAIT_ABANDONED"<<endl;
    	}
    	cout<<"子线程4运行"<<endl;
    	return 1;
    }
    

      

  • 相关阅读:
    安装的时候,突然安装程序关闭,的灵异问题。
    CSAPP阅读笔记(1)-序
    CSAPP阅读笔记(2)-虚存管理
    nafxcwd.lib(afxmem.obj) :error LNK2005:"void * __cdecl operator new(unsigned int)"
    Linux内核源代码情景分析读书笔记(5)-关于fork/clone/vfork
    [转]调试经验总结VC下的错误对话框
    IP数据包首部的校验和算法
    Matlab画图及生成exe文件
    VC++6.0中的new
    Linux内核模块编译、加载&卸载及查看运行结果
  • 原文地址:https://www.cnblogs.com/wucg/p/2414111.html
Copyright © 2011-2022 走看看