ios多核心 處理代碼

來源:互聯網
上載者:User
// 多核心加速處理函數// 在阻塞期間,建立和處理器核心數相同數量的線程來執行回呼函數// 例如 雙核 會執行下面的方法// pfun(0, 2)// pfun(1, 2)inlinevoid MultiCoreProcessing(void (^pfun)(int i_thread, int num_thread)){    NSUInteger processorCount = [[NSProcessInfo processInfo] processorCount];        //單核CPU直接執行    if (!OPT_MULTICORE || processorCount == 1)    {        pfun(0, 1);        return;    }        unsigned short int count = processorCount;        //訊號量    dispatch_semaphore_t *semPart = (dispatch_semaphore_t*)malloc(sizeof(dispatch_semaphore_t)*count);        //啟動    for (int i=0; i<count; i++)    {        //建立一個等待的訊號量        semPart[i] = dispatch_semaphore_create(0);                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(void){                        //執行回調方法            pfun(i, count);                        dispatch_semaphore_signal(semPart[i]);        });    }        //等待任務結束    for (int i=0; i<count; i++)    {        dispatch_semaphore_wait(semPart[i], DISPATCH_TIME_FOREVER);        dispatch_release(semPart[i]);    }        free(semPart);}用法:void (^pfun)(int, int)  = ^void (int i_thread, int num_thread)    {        //將圖片資料分割成 num_thread 次執行,每個線程處理一部分資料        TiBitmapData *bitmapPart = SplitBitmap(bitmap, i_thread, num_thread);                AdjustVibrance(*bitmapPart, saturation, vibrance);                delete bitmapPart;    };        MultiCoreProcessing(pfun);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.