c++多線程執行個體

來源:互聯網
上載者:User

標籤:

#include <windows.h>#include <stdio.h>#include <process.h>int g_ntotal = 100;int g_thread_counter;int g_sum;//計算結果HANDLE g_thread_lock;//HANDLE 被類型定義為 void *struct THREAD_DATA{    int num_threads;    int thread_id;};void sum_func(void *pdata){    THREAD_DATA *ptdata = (THREAD_DATA *)pdata;    int i, sum = 0;    for (i = ptdata->thread_id; i <= g_ntotal; i += ptdata->num_threads)        sum += i;    delete ptdata;    WaitForSingleObject(g_thread_lock, INFINITE);    g_sum += sum;    --g_thread_counter;    ReleaseMutex(g_thread_lock);}void main(void){    LARGE_INTEGER hfreq, hcounter1, hcounter2;//這三個貨是64位的整數    QueryPerformanceFrequency(&hfreq);    //printf("%ld",hfreq);    SYSTEM_INFO sys_info;//這貨是結構體變數    GetSystemInfo(&sys_info);//實參為指向結構體的指標    int num_processors = sys_info.dwNumberOfProcessors;//值為2,是一個DWORD類型的成員變數,DWORD被定義為無符號長整型    //num_processors = 1;        printf("Number of processors=%d\n", num_processors);//機器支援的線程數目    g_thread_lock = CreateMutex(NULL, FALSE, NULL);//傳回值為無類型指標,CreateMutex作用是找出當前系統是否已經存在指定進程的執行個體。如果沒有則建立一個互斥體。    g_thread_counter = num_processors;//系統支援的線程數    g_sum = 0;//計算結果初始化    QueryPerformanceCounter(&hcounter1);//擷取目前時間儲存到 hcounter1 中,實參是指向64位整數的指標    int i;    THREAD_DATA *pdata;//THREAD_DATA是本程式中自己定義的結構體    for (i = 1; i < num_processors; ++i)    {        pdata = new THREAD_DATA;        pdata->thread_id = i + 1;        pdata->num_threads = num_processors;//值為2        _beginthread(sum_func, 0, pdata);    }    pdata = new THREAD_DATA;    pdata->thread_id = 1;    pdata->num_threads = num_processors;//值為2    sum_func(pdata);    while (1)    {        int itemp;        WaitForSingleObject(g_thread_lock, INFINITE);        itemp = g_thread_counter;//系統支援的線程數,值為2        ReleaseMutex(g_thread_lock);        if (itemp == 0) break;    }    QueryPerformanceCounter(&hcounter2);//擷取結束時間,儲存到 hcounter2 中    double dt = (double)(hcounter2.QuadPart - hcounter1.QuadPart)        / (double)hfreq.QuadPart;//運算式中涉及的三個變數是共用體類型(8位元組),其中QuadPart是共用體的 long long類型成員,在此處被毫無節操地轉換成了double類型,double也是佔用8位元組    printf("sum=%d\n", g_sum);    printf("Calculation time=%f\n", dt);//此處將%g改為了%f,這裡是代碼的已耗用時間    //printf("%d", sizeof(double));    getchar();    CloseHandle(g_thread_lock); //將CreateMutex建立的互斥體關閉}

 

c++多線程執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.