zoukankan      html  css  js  c++  java
  • 线程同步(临界区的使用)

    1.SingalObject


    #include <windows.h>
    #include <iostream>

    using namespace std;

    CRITICAL_SECTION cs;

    int m = 0;
    int n = 0;
    DWORD WINAPI ThreadProc(LPVOID Param);
    int main()
    {


    InitializeCriticalSection(&cs);



    int a = 10;
    HANDLE ThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc,NULL, 0, NULL);

    EnterCriticalSection(&cs);
    for (int i = 0;i<1000;i++)
    {
    m++;
    n++;
    printf("Main Thread ");
    }
    LeaveCriticalSection(&cs);
    WaitForSingleObject(ThreadHandle, INFINITE);

    1.SingalObeject
    DeleteCriticalSection(&cs);
    printf("%d %d ", m, n);

    }

    DWORD WINAPI ThreadProc(LPVOID Param)
    {
    EnterCriticalSection(&cs);
    for (int i = 0; i < 1000; i++)
    {


    printf("Sub Thread ");
    m++;
    n++;
    }
    LeaveCriticalSection(&cs);
    return 0;
    }

    2.MultipleObject


    #include <windows.h>
    #include <iostream>

    using namespace std;

    CRITICAL_SECTION cs;


    int m = 0;
    int n = 0;
    DWORD WINAPI ThreadProc(LPVOID Param);

    int main()
    {

    HANDLE ThreadHandle[5] = { 0 };
    InitializeCriticalSection(&cs);

    for (int i = 0; i < 5; i++)
    {
    ThreadHandle[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);
    }


    WaitForMultipleObjects(5, ThreadHandle, TRUE, INFINITE);
    DeleteCriticalSection(&cs);
    printf("%d %d ", m, n);
    }

    DWORD WINAPI ThreadProc(LPVOID Param)
    {
    CRITICAL_SECTION cs;

    EnterCriticalSection(&::cs);   //注意(&::cs)
    for (int i=0;i<10000;i++)
    {
    m++;
    n++;
    }
    LeaveCriticalSection(&::cs);  //注意(&::cs)

    return 0;
    }



  • 相关阅读:
    Linux命令——mkdir
    UNIX 高手的 10 个习惯
    Linux命令——pwd
    Linux命令——cd命令
    Linux命令——ls命令
    denyhost安装脚本
    三台服务器无需密码相互访问
    字符串方法
    nginx简易安装
    shell 条件判断语句整理
  • 原文地址:https://www.cnblogs.com/lsh123/p/5891874.html
Copyright © 2011-2022 走看看