GDC dispatch_semaphore
信號(hào)量是一個(gè)整形值并且具有一個(gè)初始計(jì)數(shù)值,并且支持兩個(gè)操作:信號(hào)通知和等待。當(dāng)一個(gè)信號(hào)量被信號(hào)通知,其計(jì)數(shù)會(huì)被增加。當(dāng)一個(gè)線程在一個(gè)信號(hào)量上等待時(shí),線程會(huì)被阻塞(如果有必要的話),直至計(jì)數(shù)器大于零,然后線程會(huì)減少這個(gè)計(jì)數(shù)。
在GCD中有三個(gè)函數(shù)是semaphore的操作,分別是:
dispatch_semaphore_create 創(chuàng)建一個(gè)semaphore
dispatch_semaphore_signal 發(fā)送一個(gè)信號(hào)
dispatch_semaphore_wait 等待信號(hào)
簡(jiǎn)單的介紹一下這三個(gè)函數(shù),第一個(gè)函數(shù)有一個(gè)整形的參數(shù),我們可以理解為信號(hào)的總量,dispatch_semaphore_signal是發(fā)送一個(gè)信號(hào),自然會(huì)讓信號(hào)總量加1,dispatch_semaphore_wait等待信號(hào),當(dāng)信號(hào)總量少于0的時(shí)候就會(huì)一直等待,否則就可以正常的執(zhí)行,并讓信號(hào)總量-1,根據(jù)這樣的原理,我們便可以快速的創(chuàng)建一個(gè)并發(fā)控制來(lái)同步任務(wù)和有限資源訪問(wèn)控制
??int data = 3;
? ? __block int mainData = 0;
? ? __block dispatch_semaphore_t sem = dispatch_semaphore_create(0);
?? ?
? ? dispatch_queue_t queue = dispatch_queue_create("StudyBlocks", NULL);
?? ?
? ? dispatch_async(queue, ^(void) {
? ? ? ? int sum = 0;
? ? ? ? for(int i = 0; i < 5; i++)
? ? ? ? {
? ? ? ? ? ? sum += data;
?? ? ? ? ? ?
? ? ? ? ? ? NSLog(@" >> Sum: %d", sum);
? ? ? ? }
?? ? ? ?
? ? ? ? dispatch_semaphore_signal(sem);
? ? });
? ? dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
? ? for(int j=0;j<5;j++)
? ? {
? ? ? ? mainData++;
? ? ? ? NSLog(@">> Main Data: %d",mainData);
? ? }
?? ?
?? ?
?? ?
?? ?
? ? dispatch_release(sem);
? ? dispatch_release(queue);
輸出:
2013-07-08 11:33:05.654 dispatch[1102:1e03]? >> Sum: 3
2013-07-08 11:33:05.656 dispatch[1102:1e03]? >> Sum: 6
2013-07-08 11:33:05.657 dispatch[1102:1e03]? >> Sum: 9
2013-07-08 11:33:05.658 dispatch[1102:1e03]? >> Sum: 12
2013-07-08 11:33:05.659 dispatch[1102:1e03]? >> Sum: 15
2013-07-08 11:33:05.660 dispatch[1102:c07] >> Main Data: 1
2013-07-08 11:33:05.660 dispatch[1102:c07] >> Main Data: 2
2013-07-08 11:33:05.660 dispatch[1102:c07] >> Main Data: 3
2013-07-08 11:33:05.661 dispatch[1102:c07] >> Main Data: 4
2013-07-08 11:33:05.661 dispatch[1102:c07] >> Main Data: 5
通過(guò)信號(hào)量就可以保證,Main Data 永遠(yuǎn)在Sum之后執(zhí)行總結(jié)
以上是生活随笔為你收集整理的GDC dispatch_semaphore的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: block 与 dispatch que
- 下一篇: ios摇一摇功能