GCD信号量

                        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); // 创建信号量


                        NSMutableArray* integralURLs = [NSMutableArrayarray];

                        for(NSString* objectKeyincallBackNames) {

                            [selfgetIntegralURLStringByObjectKey:objectKey

                                                          success:^(NSString*integralURL) {

                                [integralURLsaddObj:integralURL];

                                dispatch_semaphore_signal(semaphore);// block中发送

                            }];

                        }

                        NSLog(@"upload object finished!");

                        //等待信号

                        dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);//外部等待


                        XLsn0wLog(@"integralURLs = %@", integralURLs);

                        if(success) {

                            success([NSArrayarrayWithArray:callBackNames],

                                    [NSArrayarrayWithArray:integralURLs]);

                        }

                    }


在GCD中有三个函数是semaphore的操作,分别是

dispatch_semaphore_create    创建一个semaphore

dispatch_semaphore_signal      发送一个信号

dispatch_semaphore_wait        等待信号

三个函数介绍:

第一个函数:创建一个整形数值的信号,即:信号的总量

dispatch_semaphore_create的声明为:

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

传入的参数为long,这里的传入的参数value必须大于或等于0,否则dispatch_semaphore_create会返回NULL。

输出一个dispatch_semaphore_t类型且值为value的信号量。

第二个函数:发送一个信号,让信号总量增加1

dispatch_semaphore_signal(semaphore)

第三个函数:首先判断信号量是否大于零,如果大于零则减掉1个信号量,往下执行,如果等于零则阻塞该线程。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容