gpt4 book ai didi

ios - 我应该将dispatch_group_leave包装在@synchronized block 中吗?

转载 作者:行者123 更新时间:2023-11-29 02:00:01 24 4
gpt4 key购买 nike

鉴于以下代码,是否不需要 @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);

最佳答案

调用 dispatch_group_enterdispatch_group_leave 时不需要提供任何额外的同步。 GCD 本身提供并发和线程工具。如果需要额外的同步或障碍,我的期望是它会在文档中被明确调用,就像调用 dispatch_once_t 具有全局/静态存储的要求一样。换句话说,GCD 一个线程库,因此除非另有说明,否则预期它的调用应该提供彼此相关的线程安全。

这种期望是基于很多个人经验和 Greg Parker 制作 a similar statement on a mailing list不久前。

关于ios - 我应该将dispatch_group_leave包装在@synchronized block 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30476965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com