gpt4 book ai didi

cocoa - 在 Grand Central Dispatch 中使用 dispatch_sync

转载 作者:IT王子 更新时间:2023-10-29 07:31:34 24 4
gpt4 key购买 nike

谁能用非常清楚的用例解释 GCD 中的 dispatch_sync 的目的是什么?我不明白在哪里以及为什么我必须使用它。

谢谢!

最佳答案

当你想执行一个 block 并等待结果时使用它。

其中一个示例是使用调度队列而不是锁进行同步的模式。例如,假设您有一个共享的 NSMutableArray a,访问由调度队列 q 调解。后台线程可能正在附加到数组(异步),而您的前台线程正在拉出第一项(同步):

NSMutableArray *a = [[NSMutableArray alloc] init];
// All access to `a` is via this dispatch queue!
dispatch_queue_t q = dispatch_queue_create("com.foo.samplequeue", NULL);

dispatch_async(q, ^{ [a addObject:something]; }); // append to array, non-blocking

__block Something *first = nil; // "__block" to make results from block available
dispatch_sync(q, ^{ // note that these 3 statements...
if ([a count] > 0) { // ...are all executed together...
first = [a objectAtIndex:0]; // ...as part of a single block...
[a removeObjectAtIndex:0]; // ...to ensure consistent results
}
});

关于cocoa - 在 Grand Central Dispatch 中使用 dispatch_sync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4607125/

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