操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    在頭文件 .h 中,定義和聲明了支持多線程的宏、類(lèi)型和函數(shù)。所有直接與線程相關(guān)的標(biāo)識(shí)符,均以前綴 thrd_ 作為開(kāi)頭。例如, 是一個(gè)對(duì)象類(lèi)型,它標(biāo)識(shí)了一個(gè)線程。

    函數(shù) ()用于創(chuàng)建并開(kāi)始執(zhí)行一個(gè)新線程。函數(shù) ()的其中一個(gè)參數(shù)為在新線程中需要被執(zhí)行的函數(shù) ()的其中一個(gè)參數(shù)為在新線程中需要被執(zhí)行的函數(shù)。()的完整原型是:

    int thrd_create(thrd_t *thr, thrd_start_t func, void *arg);

    參數(shù) func 是一個(gè)指針線程標(biāo)識(shí)符 有什么用,它指向在新線程需要被執(zhí)行的函數(shù),而 void 指針 arg 用于向該函數(shù)傳遞參數(shù)。換句話說(shuō),新線程將執(zhí)行函數(shù)調(diào)用 func(arg)。

    參數(shù) func 的類(lèi)型為 ,它被定義為 int(*)(void*)(這是一個(gè)函數(shù)指針,指向一個(gè) void 指針作為其參數(shù)并返回一個(gè) int 值的函數(shù)),因此,該線程執(zhí)行的函數(shù)返回一個(gè) int 類(lèi)型的值。

    程序在后續(xù)過(guò)程中可以通過(guò)調(diào)用函數(shù) ()獲得這個(gè) int 類(lèi)型的返回值(必要時(shí),需等待該線程執(zhí)行完)。

    如果一個(gè)線程啟動(dòng)成功,函數(shù) ()將新線程寫(xiě)入一個(gè)對(duì)象進(jìn)行標(biāo)識(shí),并通過(guò)參數(shù) thr 指向該對(duì)象,然后返回宏值 。

    在大多數(shù)情況下,后續(xù)的其他操作均依賴(lài)于該線程的執(zhí)行結(jié)果,并且只有當(dāng)該線程完成后,才能執(zhí)行其他操作。函數(shù) ()用于確保一個(gè)線程已完成。它的原型是:

    int thrd_join(thrd_t thr, int *result);

    調(diào)用 ()的線程會(huì)被阻塞,直到通過(guò) thr 標(biāo)識(shí)的線程執(zhí)行完成,這里“阻塞”(block)指的是:線程會(huì)在調(diào)用 ()的位置停留必要的時(shí)間。然后,()將線程 thr 中執(zhí)行函數(shù)的返回值寫(xiě)入指針 所引用的 int 變量中,假設(shè) 不是一個(gè)空指針。最后,()釋放屬于線程 thr 的所有資源。

    如果程序邏輯上并不需要等待線程 thr 結(jié)束,則應(yīng)該調(diào)用以下函數(shù):

    int ( thr);

    ()使得當(dāng)線程 thr 執(zhí)行完成后,自動(dòng)釋放線程占用的所有資源。一旦一個(gè)線程執(zhí)行了分離操作(調(diào)用 ()),將不用程序等待其結(jié)束,程序也不會(huì)獲得該線程執(zhí)行函數(shù)的返回值。對(duì)于每個(gè)創(chuàng)建的線程,調(diào)用 ()或 ()不得超過(guò)一次。

    在例 1 中的程序展示了使用并行操作處理數(shù)組的一種方式。各個(gè)線程先自行處理數(shù)組的各部分,然后將它們的處理結(jié)果組合在一起。該程序僅需計(jì)算一個(gè)數(shù)字序列的總和。

    線程標(biāo)識(shí)符 有什么用_線程和進(jìn)程有什么區(qū)別和聯(lián)系_用線程寫(xiě)定時(shí)任務(wù)

    函數(shù) sum()首先根據(jù)創(chuàng)建線程的最大數(shù)量確定劃分?jǐn)?shù)組所得的各組元素的最大數(shù)量,然后調(diào)用遞歸輔助函數(shù) ()。

    函數(shù) ()將數(shù)組平均分為兩半線程標(biāo)識(shí)符 有什么用,將其中的一半交給一個(gè)新線程處理,同時(shí)調(diào)用自身來(lái)處理另一半數(shù)組。如該例所示,一個(gè)線程函數(shù)需要多個(gè)參數(shù),這些參數(shù)通常采用結(jié)構(gòu)進(jìn)行封裝。

    【例1】在幾個(gè)并行線程中計(jì)算數(shù)組元素的和

    #include 
    #include 
    #define MAX_THREADS 8           // 1、2、4、8……所創(chuàng)建線程數(shù)量的最大值
    #define MIN_BLOCK_SIZE 100      // 一個(gè)數(shù)組塊的最小值
    typedef struct                  // 函數(shù)parallel_sum()的參數(shù)
    {
        float *start;       // 傳遞給parallel_sum()的數(shù)組塊的起始地址
        int len;            // 數(shù)組塊長(zhǎng)度
        int block_size;     // 最小數(shù)組塊的大小
    

    線程標(biāo)識(shí)符 有什么用_線程和進(jìn)程有什么區(qū)別和聯(lián)系_用線程寫(xiě)定時(shí)任務(wù)

    double sum; // 求和結(jié)果 } Sum_arg; int parallel_sum(void *arg); // 線程函數(shù)的原型 // --------------------------------------------------------------- // 計(jì)算數(shù)組元素的和,并寫(xiě)入*sumPtr // sum()調(diào)用函數(shù)parallel_sum()進(jìn)行并行處理 // 返回值:如果沒(méi)有發(fā)生錯(cuò)誤,則返回true;否則,返回false bool sum(float arr[], int len, double* sumPtr) { int block_size = len / MAX_THREADS; if (block_size < MIN_BLOCK_SIZE) block_size = len;

    用線程寫(xiě)定時(shí)任務(wù)_線程和進(jìn)程有什么區(qū)別和聯(lián)系_線程標(biāo)識(shí)符 有什么用

    Sum_arg args = { arr, len, block_size, 0.0 }; if (parallel_sum(&args)) { *sumPtr = args.sum; return true; } else return false; } // --------------------------------------------------------------- // 遞歸輔助函數(shù),用以將工作分解到幾個(gè)線程中處理 int parallel_sum(void *arg) { Sum_arg *argp = (Sum_arg*)arg; // 指向參數(shù)的指針 if (argp->len <= argp->block_size) // 如果length <= block_size, // 對(duì)所有元素求和

    線程標(biāo)識(shí)符 有什么用_線程和進(jìn)程有什么區(qū)別和聯(lián)系_用線程寫(xiě)定時(shí)任務(wù)

    { for (int i = 0; i < argp->len; ++i) argp->sum += argp->start[i]; return 1; } else // 如果length > block_size, // 分解數(shù)組 { int mid = argp->len / 2; Sum_arg arg2 = { argp->start+mid, argp->len-mid, argp->block_size, 0}; // 指定后一半數(shù)組 argp->len = mid; // 前一半數(shù)組的長(zhǎng)度 thrd_t th; // 在新線程中處理前一半數(shù)組

    線程標(biāo)識(shí)符 有什么用_用線程寫(xiě)定時(shí)任務(wù)_線程和進(jìn)程有什么區(qū)別和聯(lián)系

    int res = 0; if (thrd_create(&th, parallel_sum, arg) != thrd_success) return 0; // 沒(méi)能成功創(chuàng)建新線程 if (!parallel_sum(&arg2)) // 在當(dāng)前線程下,以遞歸方式處理后一半數(shù)組 { thrd_detach(th); return 0; // 遞歸調(diào)用失敗 } thrd_join(th, &res); if (!res) return 0; // 同級(jí)線程報(bào)告執(zhí)行失敗 argp->sum += arg2.sum; return 1; } }

網(wǎng)站首頁(yè)   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶(hù)案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有