異なるタスクで同じキューでdispatch_asyncメソッドを2回呼び出すと、両方のタスクの同じスレッドではなく、異なるスレッドでタスクが実行されます。
void(^myBlock)(void) = ^{
for(int i = 0;i < 10 ; i++)
{
NSLog(@"%d and current queue = %@",i,[NSThread currentThread]);
}
};
-(void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_
DEFAULT, 0);
dispatch_async(queue,myBlock);
dispatch_async(queue,myBlock);
}
このプログラムを実行すると、2 つのスレッドが作成されます。以下が出力です。
2013-09-10 17:45:20.435 ConcurrencyDemo[1331:30b] 0 および現在のキュー = {name = (null), num = 3}
2013-09-10 17:45:20.435 ConcurrencyDemo[1331:1603] 0 および現在のキュー = {name = (null)、num = 2}
2013-09-10 17:45:20.438 ConcurrencyDemo[1331:1603] 1 および現在のキュー = {name = (null)、num = 2}
2013-09- 10 17:45:20.438 ConcurrencyDemo[1331:30b] 1 および現在のキュー = {name = (null), num = 3}
2013-09-10 17:45:20.440 ConcurrencyDemo[1331:1603] 2 および現在のキュー = {名前 = (ヌル)、数値 = 2}
2013-09-10 17:45:20.440 ConcurrencyDemo[1331:30b] 2 および現在のキュー = {名前 = (ヌル)、数値 = 3}
2013-09-10 17:45 :20.441 ConcurrencyDemo[1331:1603] 3 および現在のキュー = {name = (null), num = 2}
2013-09-10 17:45:20.441 ConcurrencyDemo[1331:30b] 3 および現在のキュー = {name = (null), num = 3}
2013-09-10 17:45:20.442 ConcurrencyDemo[1331:30b] 4 および現在のキュー = {name = (null)、num = 3}
2013-09-10 17:45:20.442 ConcurrencyDemo[1331:1603] 4 および現在のキュー = {name = (null)、num = 2}
2013-09- 10 17:45:20.443 ConcurrencyDemo[1331:1603] 5 および現在のキュー = {name = (null), num = 2}
2013-09-10 17:45:20.443 ConcurrencyDemo[1331:30b] 5 および現在のキュー = {名前 = (null)、num = 3}
2013-09-10 17:45:20.444 ConcurrencyDemo[1331:30b] 6 および現在のキュー = {name = (null)、num = 3}
2013-09-10 17:45 :20.444 ConcurrencyDemo[1331:1603] 6 および現在のキュー = {name = (null), num = 2}
2013-09-10 17:45:20.445 ConcurrencyDemo[1331:30b] 7 および現在のキュー = {name = (null), num = 3}
2013-09-10 17:45:20.445 ConcurrencyDemo[1331:1603] 7 および現在のキュー = {name = (null)、num = 2}
2013-09-10 17:45:20.446 ConcurrencyDemo[1331:1603] 8 および現在のキュー = {name = (null)、num = 2}
2013-09- 10 17:45:20.446 ConcurrencyDemo[1331:30b] 8 および現在のキュー = {name = (null), num = 3}
2013-09-10 17:45:20.448 ConcurrencyDemo[1331:30b] 9 および現在のキュー = {名前 = (ヌル)、数値 = 3}
2013-09-10 17:45:20.448 ConcurrencyDemo[1331:1603] 9 および現在のキュー = {名前 = (ヌル)、数値 = 2}
なぜこれが起こっているのか誰にも教えてもらえますか?