win32 实现死锁的小例子
生活随笔
收集整理的這篇文章主要介紹了
win32 实现死锁的小例子
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
死鎖的一種情況是兩個(gè)線程競爭兩個(gè)鎖,需要同時(shí)拿到兩個(gè)鎖才能執(zhí)行,然后出現(xiàn)了兩個(gè)線程各拿一個(gè)鎖的情況,這樣兩個(gè)線程就都無法繼續(xù)執(zhí)行,稱為死鎖。
避免死鎖的方法有很多,有預(yù)防死鎖,出現(xiàn)死鎖后通過某些方法釋放鎖等。
下面是一個(gè)死鎖的小例子:
// 死鎖demo#include "stdafx.h"CRITICAL_SECTION cs1, cs2;DWORD WINAPI ThreadA(LPVOID p) {while (TRUE){printf("A1\n");EnterCriticalSection(&cs1);printf("A2\n");EnterCriticalSection(&cs2);printf("A3\n");LeaveCriticalSection(&cs2);printf("A4\n");LeaveCriticalSection(&cs1);printf("A5\n");}return 0; }DWORD WINAPI ThreadB(LPVOID p) {while (TRUE){printf("B1\n");EnterCriticalSection(&cs2);printf("B2\n");EnterCriticalSection(&cs1);printf("B3\n");LeaveCriticalSection(&cs1);printf("B4\n");LeaveCriticalSection(&cs2);printf("B5\n");}return 0; }int main(int argc, char* argv[]) {InitializeCriticalSection(&cs1);InitializeCriticalSection(&cs2);CreateThread(0,0,ThreadA,0,0,0);CreateThread(0,0,ThreadB,0,0,0);Sleep(114514);return 0; }運(yùn)行結(jié)果1:
運(yùn)行結(jié)果2:
…
略。
總結(jié)
以上是生活随笔為你收集整理的win32 实现死锁的小例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows结束线程的三种方式
- 下一篇: WIN32多线程抢红包练习