亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? badlock.cpp

?? Windows via C/C++, Fifth Edition圖書源代碼
?? CPP
字號:
/******************************************************************************
Module:  BadLock.cpp
Notices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre
******************************************************************************/


#include "..\CommonFiles\CmnHdr.h"     /* See Appendix A. */
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <tchar.h>


DWORD WINAPI LockProcessHandler(PVOID pvParam) {

   HANDLE hProcess = (HANDLE) pvParam;
   WaitForSingleObject(hProcess, INFINITE);
   CloseHandle(hProcess);
   return(TRUE);
}


void LockProcess() {

   STARTUPINFO si = { sizeof(si) };
   PROCESS_INFORMATION pi;
   TCHAR sz[] = TEXT("notepad");
   CreateProcess(NULL, sz, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
   CloseHandle(pi.hThread);

   DWORD threadID;
   CloseHandle(
      CreateThread(NULL, 0, LockProcessHandler, pi.hProcess, 0, &threadID));
   _tprintf(TEXT("LockProcess = %u\n"), threadID);
   _tprintf(TEXT("   Notepad = %u\n"), pi.dwProcessId);
}


DWORD WINAPI SimpleThreadHandler(PVOID pvParam) {
  
   WaitForSingleObject((HANDLE) pvParam, INFINITE);   

   return(0);
}


DWORD WINAPI BlockedThreadHandler(PVOID pvParam) {
  
   HANDLE hParentThread;
   DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), 
      GetCurrentProcess(), &hParentThread, 0, FALSE, 
      DUPLICATE_SAME_ACCESS);
   HANDLE handles[3];
   DWORD threadID1;
   handles[0] = CreateThread(NULL, 0, SimpleThreadHandler, 
      hParentThread, 0, &threadID1);
   DWORD threadID2;
   handles[1] = CreateThread(NULL, 0, SimpleThreadHandler, 
      hParentThread, 0, &threadID2);
   DWORD threadID3;
   handles[2] = CreateThread(NULL, 0, SimpleThreadHandler, 
      hParentThread, 0, &threadID3);
   
   _tprintf(TEXT("LockThreads = %u\n"), GetCurrentThreadId());
   _tprintf(TEXT("   thread1 = %u (0x%x)\n"), threadID1, PtrToUlong(handles[0]));
   _tprintf(TEXT("   thread2 = %u (0x%x)\n"), threadID2, PtrToUlong(handles[1]));
   _tprintf(TEXT("   thread3 = %u (0x%x)\n"), threadID3, PtrToUlong(handles[2]));

   Sleep(100);

   // Note: WaitForMultipleObjects is not handled by WCT
   WaitForMultipleObjects(3, handles, TRUE, INFINITE);   
   //WaitForSingleObject(handles[0], INFINITE);   

   _tprintf(TEXT("LockThreads is over\n"));
   
   return(0);
}

void LockThreads() {

   DWORD threadID;
   CloseHandle(
      CreateThread(NULL, 0, BlockedThreadHandler, NULL, 0, &threadID));
}



CRITICAL_SECTION csAbandonned;

DWORD WINAPI AbandonnedCriticalSectionHandler(PVOID pvParam) {

   if (pvParam == NULL)
   {
      EnterCriticalSection(&csAbandonned);
      _tprintf(TEXT("   %u has abandonned a critical section\n"), GetCurrentThreadId());  

      // never leave the critical section
      return(0);
   }
   else
   {
      _tprintf(TEXT("   %u is entering an abandonned critical section\n"), GetCurrentThreadId());  
      EnterCriticalSection(&csAbandonned);
      _tprintf(TEXT("   %u is leaving an abandonned critical section\n"), GetCurrentThreadId());  
      LeaveCriticalSection(&csAbandonned);
      _tprintf(TEXT("   %u has left an abandonned critical section\n"), GetCurrentThreadId());  
      return(0);
   }
}


void AbandonnedCriticalSection() {

   InitializeCriticalSection(&csAbandonned);
   
   DWORD threadID;
   HANDLE hThread = 
      CreateThread(NULL, 0, AbandonnedCriticalSectionHandler, NULL, 0, &threadID);

   _tprintf(TEXT("AbandonnedCriticalSection:\n"));
   _tprintf(TEXT("   thread = %u\n"), threadID);
   
   Sleep(1000);
   
   hThread = 
      CreateThread(NULL, 0, AbandonnedCriticalSectionHandler, (PVOID)1, 0, &threadID);
}



HANDLE hMutex1;
HANDLE hMutex2;
HANDLE hMutex3;

DWORD WINAPI LockMutexHandler(PVOID pvParam) {

   DWORD dwAction = PtrToUlong(pvParam);
   if (dwAction == 1) {
      WaitForSingleObject(hMutex1, INFINITE);
      Sleep(1000);
      WaitForSingleObject(hMutex2, INFINITE);
   } else 
   if (dwAction == 2)
   {
      WaitForSingleObject(hMutex2, INFINITE);
      Sleep(1000);
      WaitForSingleObject(hMutex3, INFINITE);
   } else {
      WaitForSingleObject(hMutex3, INFINITE);
      Sleep(1000);
      WaitForSingleObject(hMutex1, INFINITE);
   }

   return(0);
}

void LockMutex() {
   hMutex1 = CreateMutex(NULL, FALSE, TEXT("FirstMutex"));
   hMutex2 = CreateMutex(NULL, FALSE, TEXT("SecondMutex"));
   hMutex3 = CreateMutex(NULL, FALSE, TEXT("ThirdMutex"));

   DWORD threadID1;
   CloseHandle(
      CreateThread(NULL, 0, LockMutexHandler, (PVOID)1, 0, &threadID1));
   DWORD threadID2;
   CloseHandle(
      CreateThread(NULL, 0, LockMutexHandler, (PVOID)2, 0, &threadID2));
   DWORD threadID3;
   CloseHandle(
      CreateThread(NULL, 0, LockMutexHandler, (PVOID)3, 0, &threadID3));
   
   _tprintf(TEXT("LockMutex:\n"));
   _tprintf(TEXT("   thread1 = %u\n"), threadID1);
   _tprintf(TEXT("   thread2 = %u\n"), threadID2);
   _tprintf(TEXT("   thread3 = %u\n"), threadID3);
   _tprintf(TEXT("   hMutex1 = 0x%x\n"), PtrToUlong(hMutex1));
   _tprintf(TEXT("   hMutex2 = 0x%x\n"), PtrToUlong(hMutex2));
   _tprintf(TEXT("   hMutex3 = 0x%x\n"), PtrToUlong(hMutex3));
}



CRITICAL_SECTION cs1;
CRITICAL_SECTION cs2;

DWORD WINAPI LockCriticalSectionHandler(PVOID pvParam) {
   
   DWORD dwAction = PtrToUlong(pvParam);
   if (dwAction == 1) {
      EnterCriticalSection(&cs1);
      Sleep(1000);
      EnterCriticalSection(&cs2);
   } else {
      EnterCriticalSection(&cs2);
      Sleep(1000);
      EnterCriticalSection(&cs1);
   }

   return(0);
}

void LockCriticalSections() {

   InitializeCriticalSection(&cs1);
   InitializeCriticalSection(&cs2);

   DWORD threadID1;
   CreateThread(NULL, 0, LockCriticalSectionHandler, (PVOID)1, 0, &threadID1);
   DWORD threadID2;
   CreateThread(NULL, 0, LockCriticalSectionHandler, (PVOID)2, 0, &threadID2);
   
   _tprintf(TEXT("LockCriticalSections:\n"));
   _tprintf(TEXT("   thread1 = %u\n"), threadID1);
   _tprintf(TEXT("   thread2 = %u\n"), threadID2);
   _tprintf(TEXT("   &cs1 = 0x%x\n"), PtrToUlong(&cs1));
   _tprintf(TEXT("   &cs2 = 0x%x\n"), PtrToUlong(&cs2));
}


DWORD WINAPI LockInfiniteMutexHandler(PVOID pvParam) {

   HANDLE hMutex = (HANDLE)pvParam;
   WaitForSingleObject(hMutex, INFINITE);

   _tprintf(TEXT("Thread %u never goes up to here.\n"), GetCurrentThreadId());
   return(0);
}

void LockInfinite() {

   HANDLE hMutex = CreateMutex(NULL, TRUE, TEXT("InfiniteMutex"));
   
   DWORD threadID;
   CloseHandle(
      CreateThread(NULL, 0, LockInfiniteMutexHandler, (PVOID)hMutex, 0, 
         &threadID));

   _tprintf(TEXT("Infinite wait on 0x%x by %u:\n"), PtrToUlong(hMutex), threadID);
}



DWORD WINAPI RunningThreadHandler(PVOID pvParam) {

   SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
   
   // Infinite loop
   for (;;) ;

   return(0);
}

void RunningThread() {

   DWORD threadID;
   CloseHandle(CreateThread(NULL, 0, RunningThreadHandler, (PVOID)1, 0, &threadID));

   _tprintf(TEXT("Running thread:\n"));
   _tprintf(TEXT("   thread = %u\n"), threadID);
}


void TestDeadlock() {

   _tprintf(TEXT("TestDeadlock process ID: %u\n"), GetCurrentProcessId());
   _tprintf(TEXT("--------------------------------\n"));

   RunningThread();
   LockInfinite();
   LockCriticalSections();
   LockMutex();
   AbandonnedCriticalSection();
   LockProcess();
   LockThreads();
}


int _tmain(int argc, _TCHAR* argv[]) {
   
   TestDeadlock();
   
   MessageBox(NULL, NULL, TEXT("Click OK to end the application"), MB_OK);
   return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综| 在线亚洲人成电影网站色www| 国产精品欧美一级免费| 欧美日精品一区视频| 国产一区二区免费看| 日韩精品三区四区| 亚洲人精品一区| 久久综合色播五月| 欧美一二三四区在线| 日本高清不卡视频| 成人性生交大片免费看中文| 理论片日本一区| 午夜视频在线观看一区二区| 中文字幕一区二区三区蜜月| 久久综合资源网| 欧美一级久久久| 欧美军同video69gay| 色综合视频在线观看| 成人做爰69片免费看网站| 激情综合网最新| 日本成人在线看| 午夜精品久久久久久久久久| 亚洲色图色小说| 日本一区二区综合亚洲| 久久先锋影音av鲁色资源| 91精品国产综合久久国产大片| 欧美伊人久久久久久午夜久久久久| 成人免费视频视频| 成人高清在线视频| 成人h精品动漫一区二区三区| 国产精品2024| 国产成人精品午夜视频免费| 国产一区二区三区日韩| 狠狠狠色丁香婷婷综合久久五月| 开心九九激情九九欧美日韩精美视频电影 | 久久精品一区二区三区av| 日韩欧美成人一区| 日韩欧美黄色影院| 日韩三级免费观看| 欧美成人三级电影在线| 精品国产一区二区三区不卡 | 色婷婷国产精品久久包臀 | 欧美亚洲一区二区在线观看| 91久久精品一区二区三区| 97精品超碰一区二区三区| 91视频一区二区三区| 色婷婷精品久久二区二区蜜臂av| 色狠狠色噜噜噜综合网| 在线观看成人小视频| 欧美亚洲国产一卡| 欧美精品在线一区二区三区| 91精品久久久久久久91蜜桃 | 亚洲丝袜制服诱惑| 一区二区三区欧美视频| 亚洲1区2区3区视频| 日本人妖一区二区| 国产尤物一区二区| 99久久精品免费精品国产| 欧美亚洲动漫制服丝袜| 欧美一区二区三区四区在线观看| 欧美成人性福生活免费看| 国产区在线观看成人精品| 亚洲视频在线一区二区| 亚洲国产欧美在线| 久久精品国产免费看久久精品| 国产高清成人在线| 色综合中文字幕| 67194成人在线观看| 久久久久久久久免费| 亚洲免费伊人电影| 日韩不卡一二三区| 成人午夜免费av| 欧美色手机在线观看| 精品福利av导航| 亚洲欧美一区二区三区国产精品 | 国产精品久久久一本精品| 亚洲一区二区在线视频| 日韩国产高清在线| 国产成人av电影在线观看| 日本道精品一区二区三区| 日韩三级伦理片妻子的秘密按摩| 国产精品网站导航| 天天综合网天天综合色| 国产黄色精品网站| 欧美性猛交一区二区三区精品| 精品国产精品一区二区夜夜嗨| 亚洲人123区| 激情国产一区二区| 欧美专区亚洲专区| 中文一区二区在线观看| 日韩—二三区免费观看av| 不卡在线视频中文字幕| 日韩欧美国产一区在线观看| 亚洲天堂网中文字| 极品瑜伽女神91| 欧美日韩精品一区二区三区蜜桃| 国产视频视频一区| 日韩av中文在线观看| 97国产一区二区| 国产肉丝袜一区二区| 免费人成在线不卡| 欧美系列亚洲系列| 国产精品伦理在线| 激情综合色播激情啊| 欧美日韩亚洲另类| 最新国产の精品合集bt伙计| 久久超级碰视频| 69p69国产精品| 亚洲中国最大av网站| 国产99一区视频免费| 欧美电影精品一区二区| 丝袜诱惑亚洲看片| 91成人在线免费观看| 国产精品久久一卡二卡| 国产精品资源网| 欧美sm极限捆绑bd| 美女在线一区二区| 91麻豆精品国产91久久久久久| 亚洲精品菠萝久久久久久久| 成人av片在线观看| 中文字幕精品一区二区三区精品| 国内成+人亚洲+欧美+综合在线| 欧美日韩国产综合视频在线观看| 亚洲精品精品亚洲| 色丁香久综合在线久综合在线观看 | 4hu四虎永久在线影院成人| 亚洲综合在线观看视频| 99在线视频精品| 国产精品初高中害羞小美女文| 成人手机电影网| 国产日韩欧美精品一区| 国产成人精品综合在线观看 | 蜜臀av一区二区在线免费观看| 欧美日韩免费不卡视频一区二区三区| 国产精品二三区| 不卡高清视频专区| 亚洲人成精品久久久久| 色偷偷一区二区三区| 亚洲欧美另类综合偷拍| 色偷偷成人一区二区三区91| 亚洲乱码国产乱码精品精的特点| 成人不卡免费av| 中文字幕一区二区三中文字幕| 成人av在线资源网| 亚洲美女屁股眼交| 欧美亚洲精品一区| 免费av网站大全久久| 日韩免费电影网站| 国产成人综合在线观看| 中文字幕精品一区二区三区精品| www.日韩av| 一区二区三区高清在线| 欧美丰满少妇xxxbbb| 免费在线看成人av| 久久久777精品电影网影网| 99久久精品免费| 亚洲香肠在线观看| 精品少妇一区二区三区免费观看| 国产精品一区二区x88av| 中文字幕欧美国产| 欧美亚一区二区| 奇米色777欧美一区二区| 久久亚洲精品国产精品紫薇| 懂色av一区二区三区免费看| 亚洲人吸女人奶水| 日韩三级视频在线看| 东方aⅴ免费观看久久av| 亚洲精品国产a| 欧美成人免费网站| 97精品久久久久中文字幕| 天堂va蜜桃一区二区三区| 国产视频一区二区在线观看| 日本精品视频一区二区| 久久99久久99| 中文字幕制服丝袜一区二区三区 | 国产乱码精品1区2区3区| 一区二区三区四区中文字幕| 欧美一区二区三区精品| 成人国产一区二区三区精品| 日日夜夜免费精品视频| 欧美国产日本视频| 666欧美在线视频| 99国产一区二区三精品乱码| 日日摸夜夜添夜夜添精品视频| 欧美变态tickling挠脚心| 色偷偷久久人人79超碰人人澡 | 奇米在线7777在线精品 | 国产欧美一区二区三区在线看蜜臀| 91视频免费观看| 狠狠色伊人亚洲综合成人| 自拍偷拍欧美激情| 精品国产乱码久久久久久久久| 色狠狠一区二区三区香蕉| 国产老女人精品毛片久久| 夜夜夜精品看看| 国产精品青草久久| 日韩欧美国产一二三区| 欧洲一区二区三区免费视频| 成人aa视频在线观看| 精品写真视频在线观看|