iOS使用信号量实现同步与并发数目控制
时间:2017-12-10 00:54:33来源:杰瑞文章网点击:作文字数:1500字
作文导读:我在一角,寻你的星光。被唤作火树银花的星光,尽管今夜,没有月亮。 前奏 骤然风起,雨便是纤纤柔柔的下,朦胧了整座城。朦胧了整个元宵节。 早已计划好的,要在元宵节的晚上去看灯,去看烟花。该是年年如此了吧,乐此不疲。毕竟是年的尾巴,总希望在年味淡
信号量是一个整形值并且具有一个初始计数值,并且支持两个操作:信号通知和等待。当一个信号量被信号通知,其计数会被增加。当一个线程在一个信号量上等待时,线程会被阻塞(如果有必要的话),直至计数器大于零,然后线程会减少这个计数。在GCD中有三个函数是semaphore的操作,分别是:dispatch_semaphore_create 创建一个semaphoredispatch_semaphore_signal 发送一个信号dispatch_semaphore_wait 等待信号简单的介绍一下这三个函数,第一个函数有一个整形的参数,我们可以理解为信号的总量,dispatch_semaphore_signal是发送一个信号,自然会让信号总量加1,dispatch_semaphore_wait等待信号,当信号总量少于0的时候就会一直等待,否则就可以正常的执行,并让信号总量-1。根据这样的原理,我们可以快速的创建一个并发控制来同步任务和有限资源访问控制。dispatch_group_tgroup= dispatch_group_create(); dispatch_semaphore_t semaphore = dispatch_semaphore_create(10); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);for(inti =0; i <100; i++) { dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); dispatch_group_async(group, queue, ^{ NSLog(@"%i",i); sleep(2); dispatch_semaphore_signal(semaphore); }); } dispatch_group_wait(group, DISPATCH_TIME_FOREVER); dispatch_release(group); dispatch_release(semaphore);简单的介绍一下这一段代码,创建了一个初使值为10的semaphore,每一次for循环都会创建一个新的线程,线程结束的时候会发送一个信号,线程创建之前会信号等待,所以当同时创建了10个线程之后,for循环就会阻塞,等待有线程结束之后会增加一个信号才继续执行,如此就形成了对并发的控制,如上就是一个并发数为10的一个线程队列。

iOS使用信号量实现同步与并发数目控制一文由杰瑞文章网免费提供,本站为公益性作文网站,此作文为网上收集或网友提供,版权归原作者所有,如果侵犯了您的权益,请及时与我们联系,我们会立即删除!
杰瑞文章网友情提示:请不要直接抄作文用来交作业。你可以学习、借鉴、期待你写出更好的作文。
说说你对这篇作文的看法吧