gpt4 book ai didi

ios - 使用 GCD 和代码重用 : avoiding re-entrant code deadlock

转载 作者:可可西里 更新时间:2023-11-01 06:16:01 24 4
gpt4 key购买 nike

我正在使用 GCD 为类添加线程安全。

我的类的一些公共(public)方法被类中的其他公共(public)方法调用。但是,这会导致重入锁定问题:如果我使用同步 GCD block (在某些情况下)保护适当的公开可见方法,则重用意味着有时我会尝试在当前队列上运行另一个同步块(synchronized block),这会导致死锁。

什么是最优雅的解决方案?一个明显的方法是拥有适当方法的内部版本,没有任何 GCD block ,以及具有 GCD block 的方法的外部公共(public)版本包装对内部方法的调用。这对我来说不太合适。

最佳答案

这里有一些想法:

  1. 看看你能不能使用不可变对象(immutable对象)。这意味着每当一个方法修改对象时,它实际上返回一个具有修改后状态的新对象。然后 block 将继续并使用这个新对象。这很简单,不需要特别小心,但并非总是可行。

  2. 查看您的公共(public)方法是否不能使用带有状态的私有(private)方法。由于每个 block 都会携带自己的内部状态,因此您也是线程安全的。

如果您有一些示例用例,它可能会带来更多想法...

关于ios - 使用 GCD 和代码重用 : avoiding re-entrant code deadlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443058/

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