进程中调用CreateMutex

简介: <p>// TestStorage.cpp : 定义控制台应用程序的入口点。<br> //</p> <p>#include "stdafx.h"<br> #include <Windows.h><br> #include <process.h></p> <p>//#define MUTEX_DBG</p> <p>UINT WINAPI Thread1(L

// TestStorage.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <process.h>

//#define MUTEX_DBG

UINT WINAPI Thread1(LPVOID para)
{
#ifdef MUTEX_DBG
 HANDLE* phMutex = (HANDLE*)para;

 WaitForSingleObject(*phMutex,INFINITE);
#endif
  printf("Enter Thread1/n");
  printf("I'm sleeping……/n");
  
  Sleep(1000);
  
  printf("Leave Thread1/n");

#ifdef MUTEX_DBG
 ReleaseMutex(*phMutex);
#endif

 return 0;
}
UINT WINAPI Thread2(LPVOID para)
{
#ifdef MUTEX_DBG
 HANDLE* phMutex = (HANDLE*)para;

 WaitForSingleObject(*phMutex,INFINITE);
#endif
 
  printf("Enter Thread2/n");
  printf("I'm sleeping……/n");
  
  Sleep(1000);
  
  printf("Leave Thread2/n");
 
#ifdef MUTEX_DBG
 ReleaseMutex(*phMutex);
#endif
 
 return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
 HANDLE hMutex = NULL;
#ifdef MUTEX_DBG
 hMutex = CreateMutex(NULL,FALSE,NULL);
#endif

 HANDLE hThread1 = (HANDLE)::_beginthreadex(NULL,0,Thread1,&hMutex,0,NULL);
 HANDLE hThread2 = (HANDLE)::_beginthreadex(NULL,0,Thread2,&hMutex,0,NULL);

 Sleep(4000);

 if(hThread1)
  CloseHandle( hThread1 );

 if(hThread2)
  CloseHandle( hThread2 );

 return 0;
}

相关文章
|
5月前
|
消息中间件 资源调度 调度
进程与线程的区别
【8月更文挑战第24天】
57 0
|
7月前
|
调度
进程与线程的区别与联系
进程与线程的区别与联系
|
8月前
|
调度
线程和进程的区别?
线程和进程的区别?
|
调度
进程与线程区别与联系
进程与线程区别与联系
73 0
|
调度
进程与线程的区别和联系
进程与线程的区别和联系
|
8月前
|
安全 调度
进程和线程的区别是什么
进程和线程的区别是什么
|
存储 调度
程序、进程、线程的区别
程序、进程、线程的区别
503 3
C#开发:执行进程等待
C#开发:执行进程等待
275 0
|
缓存 监控 测试技术
【Linux进程控制】进程创建 | 进程终止 | 进程等待 | 进程替换
本文主要学习理解 fork 的返回值、写时拷贝的工作细节、为什么要存在写时拷贝;进程退出码、进程退出的场景及常见的退出方法、对比 man 2 _exit 和 man 3 exit;进程终止、操作系统怎么进行释放资源、池的概念;进程等待的价值、进程等待的方法 wait 和 waitpid(常用)、int* status、阻塞和非阻塞、如何理解等待、W IFEXITED、WEXITSTATUS、WTERMSIG;什么是进程替换 && 为什么要进程替换、替换原理、7个exec系列的替换函数、模拟shell解释器;
335 1
【Linux进程控制】进程创建 | 进程终止 | 进程等待 | 进程替换

相关实验场景

更多