为什么关键部分不能用作互斥体?

时间:2019-04-07 16:07:44

标签: mutex critical-section

使用互斥锁,线程是交替执行的,但是对于关键部分,根本不是那样。

#include "stdafx.h" 
#include <windows.h> 
#include <iostream> 
#include <omp.h>
using namespace std;

int global = 100;
HANDLE ht1, ht2; 
CRITICAL_SECTION cs;
DWORD WINAPI ThreadProc1(LPVOID lpParameter ) { 
    int i, j;   
    for (j=1; j <= 12; j++)    {        
        EnterCriticalSection(&cs);   
        i = global;      
        i++;     
        Sleep (1);      
        global = i; 
        printf_s( "%4s %4d \n", " 1 th", i );     
        LeaveCriticalSection(&cs);   
    } 
    return 0;  
}
DWORD WINAPI ThreadProc2 (LPVOID lpParameter) { 
    int i, j; 
    for (j=1; j <= 12; j++)    {    
        EnterCriticalSection(&cs);   
        i = global;      
        i++;     
        Sleep (1);     
        global = i;
        printf_s( "%4s %4d %4d \n", " 2 th", i, j );     
        LeaveCriticalSection(&cs);    
    } 
    return 0; 
} 
int _tmain(int argc, _TCHAR* argv[]) { 
    HANDLE msh[2]; 
    InitializeCriticalSection(&cs);
    ht1 = CreateThread(NULL, 0, &ThreadProc1, NULL, 0, NULL); 
    ht2 = CreateThread(NULL, 0, &ThreadProc2, NULL, 0, NULL); 
    msh[0] = ht1; 
    msh[1] = ht2;
    Sleep(500);
    DeleteCriticalSection(&cs);
    return 0; 
} 

我得到这个结果 https://i.imgur.com/w45qRoU.png

使用互斥锁,结果是正常的,我期望关键部分的结果相同 https://i.imgur.com/IlqcyNT.png

0 个答案:

没有答案