码迷,mamicode.com
首页 > 其他好文 > 详细

信号量 semaphore 和 @synchronized 的运用

时间:2016-08-11 13:02:20      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

 

1. //创建全局队列

 

    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

   //创建信号量

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);

     NSMutableArray *array = [NSMutableArray array];

    for(int i = 0 ;i < 1000000;i ++){

        dispatch_async(queue, ^{

         //dispatch_semaphore 信号量基于计数器的一种多线程同步机制。在多个线程访问共有资源时候,会因为多线程的特性而引发数据           出错的问题,这里使其等待前一个线程访问完array

            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

                [array addObject:[NSNumber numberWithInt:i]];

        });

    }

   

2.

   dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

   NSMutableArray *array = [NSMutableArray array];

    for(int i = 0 ;i < 1000000;i ++){

        dispatch_async(queue, ^{      

         //给array对象加把锁。防止线程同时访问。

            @synchronized (array) {      

                [array addObject:[NSNumber numberWithInt:i]];

                NSLog(@"%d   %@",i,array);

            }      

        });

    }

    

信号量 semaphore 和 @synchronized 的运用

标签:

原文地址:http://www.cnblogs.com/LMML/p/5760495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!