С учетом следующего кода, является ли звонок @synchronized
не обязательным?Должен ли я обернуть dispatch_group_leave в блоке @synchronized?
Я предполагаю, что dispatch_group_enter/leave
является атомарным, но здесь не указано как потокобезопасное здесь https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/dispatch_group_leave.3.html, и я внезапно волнуюсь, что все это время я возился.
// Imagine this is on its own queue already (possibly main, possibly not)
dispatch_group_t group = dispatch_group_create();
for(x in array){
dispatch_group_enter(group);
[x doSomethingAsync:^{
// imagine x is part of a library which sometimes runs blocks on
// a different queue.
// surely dispatch_group_leave has its own internal synchronization?
@synchronized(group){
dispatch_group_leave(group);
}
}]
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
Да, я так много думал, как вы сказали, было бы глупо иметь поточную библиотеку с потоками. – Soup
Как насчет dispatch_group_create? –
Должно быть безопасным. – ipmcc