ios 信号量 semaphore

2018-05-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");
            });



    }
    

上一篇下一篇

猜你喜欢

热点阅读