【发布时间】:2014-05-28 13:52:38
【问题描述】:
我在我的 iOS 应用程序中创建了这个线程,我想停止它:
dispatch_queue_t myDispatch = dispatch_queue_create("com.myqueue", DISPATCH_QUEUE_CONCURRENT);
其中的myDispatch 线程分别调用dispatch_global_queue 和dispatch_main_queue 来执行繁重的操作和执行图形操作。 但是为了响应应用程序中的用户操作,可以调用另一个函数,该函数使用与 myDispatch 非常相似的另一个队列。如果 myDispatch 线程终止,则没有问题,但是在 myDispatch 线程执行期间也可能发生此调用,因此我的应用程序崩溃,因为两个线程使用相同的数组。 有办法在线程终止之前停止或终止线程吗?我想杀死当前正在运行的线程并启动新线程。
【问题讨论】:
-
见stackoverflow.com/questions/5449469/…。它涵盖了更广泛的内容。
-
虽然您可以为 GCD 编写自己的取消代码,但我们大多数人会倾向于使用
NSOperationQueue和可取消的NSOperation子类。请参阅并发编程指南的操作队列一章中的Responding to Cancellation Events。 -
不过,我实际上会退后一步,询问并发队列上的可取消操作是否是正确的架构,无论如何。如果您尝试协调与可变数组的交互(其本身不是线程安全的),您通常会为此使用串行队列。这取决于您要做什么,我不确定我们是否有足够的资源来提供合适的更广泛的架构建议。
标签: ios objective-c multithreading queue grand-central-dispatch