多线程的互斥

#include "stdafx.h"
#include
"windows.h"
#include
"stdio.h"

volatileint ThreadData =1;

CRITICAL_SECTION csPrint;
// 临界区
//HANDLE evtPrint; // 事件信号,标记事件是否已发生
//HANDLE mtxPrint; // 互斥信号,如有信号表明已经有线程进入临界区并拥有此信号
//HANDLE smphPrint; // 信号量,表示是否已经达到允许的最大线程数

void Print(char*str)
{
   EnterCriticalSection(
&csPrint); // 进入临界区
//WaitForSingleObject(evtPrint, INFINITE); // 等待事件有信号
//WaitForSingleObject(mtxPrint, INFINITE); // 等待互斥量空置(没有线程拥有它)
//WaitForSingleObject(smphPrint, INFINITE); // 等待对共享资源请求被通过 等于 P操作

for (;*str !='\0';str++)
{
       Sleep(
50);
       printf(
"%c",*str);
   }

   printf(
"\n");

   LeaveCriticalSection(
&csPrint); // 退出临界区
//SetEvent(evtPrint); // 把事件信号量恢复,变为有信号
//ReleaseMutex(mtxPrint); // 释放对互斥量的占有
//ReleaseSemaphore(smphPrint, 1, NULL); // 释放共享资源 等于 V操作

}


void ThreadProcess()
{
for(int i=0; i<6; i++)
{
       Sleep(
1000);
       Print(
"Sub  Thread is running!");
   }

   ThreadData
=0;

}


int _tmain(int argc, _TCHAR* argv[])
{
   HANDLE hThread;
   DWORD ThreadID;

   InitializeCriticalSection(
&csPrint); // 初始化临界区
//evtPrint = CreateEvent(NULL, FALSE, TRUE, L"PrintEvent"); // 初始化事件
//mtxPrint = CreateMutex(NULL, FALSE, L"PrintMutex"); // 初始化互斥量
//smphPrint= CreateSemaphore(NULL, 1, 1, L"PrintSemaphore"); // 设置信号量1个资源,因此同时只可以有一个线程访问

   hThread
=CreateThread(NULL,
0,
       (LPTHREAD_START_ROUTINE)ThreadProcess,
       NULL,
0,
&ThreadID);

while (ThreadData)
{
       Print(
"Main Thread is waiting for Sub Thread!");
       Sleep(
600);
   }


   printf(
"Main Thread Finished!");
   system(
"pause");
return0;
}

你可能感兴趣的:(多线程,互斥)