【发布时间】:2011-02-09 08:25:35
【问题描述】:
我正在尝试编写一些线程安全的方法,所以我正在使用:
...
dispatch_queue_t main = dispatch_get_main_queue();
dispatch_sync(main,^{
[self doSomethingInTheForeground];
});
...
但是如果我在不必要的主线程上,我可以跳过所有那些调度调用,所以我想知道我目前在哪个线程上。我怎么知道?
或者,也许这样做并没有什么不同(在性能上)?
这样比较可以吗?
if (dispatch_get_main_queue() == dispatch_get_current_queue()){...}
【问题讨论】:
-
使用提到的一种技术不仅可以减少开销,而且如果您对正在运行的同一队列执行 dispatch_sync,您将死锁。 dispatch_async 没问题。
-
如果您需要更通用的解决方案来防止 libdispatch 中的死锁,请查看这些帮助程序。他们不覆盖 main_queue,只是要小心。 gist.github.com/1205760
-
这个问题很好,但是示例代码显示了死锁模式。也许修改一下比较好。
标签: objective-c multithreading cocoa grand-central-dispatch