线程同步

来源:互联网 发布:sql语句查询例子 编辑:程序博客网 时间:2024/06/05 09:14

创建线程:

    DWORD param;    LPDWORD dwThreadID;  //线程ID    //创建线程    HANDLE hThread = CreateThread(        NULL,    //安全设置,一般设为NULL        0,       //新线程的初始堆栈大小,默认0        (LPTHREAD_START_ROUTINE)ThreadFunction,  //指向线程函数        &param,  //传递给ThreadProc的参数,这样主线程和从属线程就可以共享数据。        0,       //启动选项,一般为0        &dwThreadID);  //存储线程ID    if(hThread == INVALID_HANDLE_VALUE)    {        MessageBox("线程创建失败!", "提示", 64);        return;    }
#include "stdio.h"#include "Windows.h"int g_Num_One = 0;CRITICAL_SECTION  g_cs;DWORD WINAPI ThreadProc(LPVOID lpParam){    int nTmp = 0;    for(int i=0; i<10; i++)    {        EnterCriticalSection(&g_cs);  //进入临界区        nTmp = g_Num_One;        nTmp++;        Sleep(1);        g_Num_One = nTmp;        LeaveCriticalSection(&g_cs);  //离开临界区    }    return 0;}int main(){    InitializeCriticalSection(&g_cs);  //初始化临界区对象    HANDLE hThread[10] = {0};    for(int i=0; i<10; i++)    {        hThread[i] = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);        if(hThread[i] == NULL)            printf("%d CreateThread Error \n", i);    }    WaitForMultipleObjects(10, hThread, TRUE, INFINITE); //等待多个线程    printf("%d\n", g_Num_One);    for(i=0; i<10; i++)        CloseHandle(hThread[i]);    DeleteCriticalSection(&g_cs);  //删除临界区对象    return 0;}

这里写图片描述

0 0
原创粉丝点击