美文网首页
ios 信号量 semaphore

ios 信号量 semaphore

作者: 曾柏超 | 来源:发表于2018-05-14 14:14 被阅读4次
    
    
    dispatch_group_t group= 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(int i =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_group_notify(group, queue, ^{
    
    
            NSLog(@"ok");
            //在这里 进行请求后的方法,回到主线程
            dispatch_async(dispatch_get_main_queue(), ^{
    
                //更新UI操作
    
            });
        });
    
        
        
        
    //    // 创建信号量
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        // 创建全局并行
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_group_t group = dispatch_group_create();
        dispatch_group_async(group, queue, ^{
    
            sleep(8);
            dispatch_semaphore_signal(semaphore);
            NSLog(@"==========1==========");
    
        });
        dispatch_group_async(group, queue, ^{
    
            sleep(6);
            dispatch_semaphore_signal(semaphore);
            NSLog(@"==========2==========");
        });
        dispatch_group_async(group, queue, ^{
    
    
            sleep(4);
            dispatch_semaphore_signal(semaphore);
                NSLog(@"==========3===========");
    
        });
    
        dispatch_group_notify(group, queue, ^{
    
            // 三个请求对应三次信号等待
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    
            //在这里 进行请求后的方法,回到主线程
            dispatch_async(dispatch_get_main_queue(), ^{
    
                //更新UI操作
                NSLog(@"ok");
    
            });
        });
        
        
        
      
            for (int i = 0; i<3000000; i++) {
    
                //选择组合:全局队列异步执行 -> 由子线程下载图片
                dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
                dispatch_async(globalQueue, ^{
    
                    NSLog(@"开始下载图片:%@", [NSThread currentThread]);
                    //NSString -> NSURL -> NSData -> UIImage
                    //            NSString *imageStr = @"http://www.egouz.com/uploadfile/2015/0305/20150305103626911.jpg";
    
                    NSString *imageStr = @"http://img.zcool.cn/community/01e1d8596a4778a8012193a32eaf45.jpg";
    
    
                    NSURL *imageURL = [NSURL URLWithString:imageStr];
                    //下载图片
    
                      @autoreleasepool{
    
                        NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
                        UIImage *image = [UIImage imageWithData:imageData];
    
                      }
    
                    //从子线程回到主线程(方式二:常用)
                    //组合:主队列异步执行
                    dispatch_async(dispatch_get_main_queue(), ^{
                        NSLog(@"回到主线程:%@", [NSThread currentThread]);
                        //更新界面
                        //            self.imageView.image = image;
                    });
    
                    NSLog(@"xxxxxxxx");
                });
    
    
    
        }
        
    
    

    相关文章

      网友评论

          本文标题:ios 信号量 semaphore

          本文链接:https://www.haomeiwen.com/subject/poaddftx.html