欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    在頭文件 .h 中,定義和聲明了支持多線程的宏、類型和函數。所有直接與線程相關的標識符,均以前綴 thrd_ 作為開頭。例如, 是一個對象類型,它標識了一個線程。

    函數 ()用于創建并開始執行一個新線程。函數 ()的其中一個參數為在新線程中需要被執行的函數 ()的其中一個參數為在新線程中需要被執行的函數。()的完整原型是:

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

    參數 func 是一個指針線程標識符 有什么用,它指向在新線程需要被執行的函數,而 void 指針 arg 用于向該函數傳遞參數。換句話說,新線程將執行函數調用 func(arg)。

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

    程序在后續過程中可以通過調用函數 ()獲得這個 int 類型的返回值(必要時,需等待該線程執行完)。

    如果一個線程啟動成功,函數 ()將新線程寫入一個對象進行標識,并通過參數 thr 指向該對象,然后返回宏值 。

    在大多數情況下,后續的其他操作均依賴于該線程的執行結果,并且只有當該線程完成后,才能執行其他操作。函數 ()用于確保一個線程已完成。它的原型是:

    int thrd_join(thrd_t thr, int *result);

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

    如果程序邏輯上并不需要等待線程 thr 結束,則應該調用以下函數:

    int ( thr);

    ()使得當線程 thr 執行完成后,自動釋放線程占用的所有資源。一旦一個線程執行了分離操作(調用 ()),將不用程序等待其結束,程序也不會獲得該線程執行函數的返回值。對于每個創建的線程,調用 ()或 ()不得超過一次。

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

    線程標識符 有什么用_線程和進程有什么區別和聯系_用線程寫定時任務

    函數 sum()首先根據創建線程的最大數量確定劃分數組所得的各組元素的最大數量,然后調用遞歸輔助函數 ()。

    函數 ()將數組平均分為兩半線程標識符 有什么用,將其中的一半交給一個新線程處理,同時調用自身來處理另一半數組。如該例所示,一個線程函數需要多個參數,這些參數通常采用結構進行封裝。

    【例1】在幾個并行線程中計算數組元素的和

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

    線程標識符 有什么用_線程和進程有什么區別和聯系_用線程寫定時任務

    double sum; // 求和結果 } Sum_arg; int parallel_sum(void *arg); // 線程函數的原型 // --------------------------------------------------------------- // 計算數組元素的和,并寫入*sumPtr // sum()調用函數parallel_sum()進行并行處理 // 返回值:如果沒有發生錯誤,則返回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;

    用線程寫定時任務_線程和進程有什么區別和聯系_線程標識符 有什么用

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

    線程標識符 有什么用_線程和進程有什么區別和聯系_用線程寫定時任務

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

    線程標識符 有什么用_用線程寫定時任務_線程和進程有什么區別和聯系

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

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

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

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有