20170526-27關於GCD控制執行緒併發數,多執行緒併發數控制

weixin_33850890發表於2017-05-27

主要看第二個。

關於GCD,可能很多人都會說,我會用。以前我也是這麼說的,其實,自己會用的很少很少,最多建立個多執行緒,然後返回主執行緒重新整理一下UI,如此而已。

這兩天研究了一下,控制多執行緒併發,也多虧了網路上各個同行的解答,文章。於是我封裝了了兩三種,希望能幫助踽踽獨行的各位同行們。

首先,如何控制GCD多執行緒的併發呢?這個並不像NSOperationQueue那樣,有一個直接的引數operationCount簡單直接的控制執行緒併發數量。

在GCD中,我們可以通過訊號量semaphore來進行執行緒併發數控制。直接看程式碼:


先給大家說一個停車的形象示例:

一個停車場還有十個車位,現在有一百輛車要進來這個停車場。前面的十個車主先進入了停車場,剩下的90個車主只好在外面等候,這時候,裡面有車不停了,開出一輛,剩下的90位車主趕緊進去了一輛。

執行緒限制:10,匯流排程數:100,只要有執行緒完成,其他等待中的執行緒立即插入。

這個semaphore訊號量有三個基礎方法:

1,dispatch_semaphore_create:建立一個訊號量,並初始化一個併發值,如果你想限制你的app的多執行緒的併發數最大為50,那就dispatch_semaphore_create(50);

2,dispatch_semaphore_wait:將當前訊號量減去1。就相當於車位減少一個。如果當前的訊號量為0,那麼將會在這裡等待。能達到控制執行緒最大併發數量。

3,dispatch_semaphore_signal:將當前的訊號量加上1。相當於完成一個執行緒,又空出一個車位。

下面是我的封裝,兩個c,一個類方法。

一、類方法:


3599687-23aac33eeb1d4073.png
類方法.h檔案



3599687-5247b194b0110371.png
類方法.m檔案

二、能使用oc語言的c語言方法:

就是簡單的建立一個繼承於NSObject的類,然後把裡面的@interface @implemation這些全部刪除,形成一個可直接執行的函式類。


加上extern的修飾符,可以用於c++檔案。

3599687-6b151634346d85c2.png
能使用oc語言的c語言函式.h檔案
3599687-e675abbc09ca2c82.png
能使用oc語言的c語言函式.h檔案



3599687-8e6af424b3bcc553.png
.m檔案


三、c語言:


3599687-c28f1cabd7ef6f24.png
.h


3599687-399b92ec4f98f5df.png
.c


希望能有所幫助。如有轉載,請註明出處。

相關文章