> On Dec 21, 2017, at 10:57 AM, Geordie J via swift-corelibs-dev
> <swift-corelibs-dev@swift.org> wrote:
>
> Hi,
>
> We are having some issues with threading / dispatch queues this week.
> Basically I’m wondering why the following “async” code has the output it does:
>
> print(Thread.isMainThread) // true
> DispatchQueue.main.async {
> print(Thread.isMainThread) // false (???)
> }
This is wrong.
>
> Whereas this same code but with “sync" prints “true” “true”:
>
> print(Thread.isMainThread) // true
> DispatchQueue.main.sync {
> print(Thread.isMainThread) // true
> }
This is expected, because dispatch_sync() on the main thread is... difficult.
>
> This goes against what I thought I understood about Dispatch. Are there any
> threading guarantees made by DispatchQueue at all? Especially on the main
> queue. And if not, is there another construct we can use?
>
> The issue is that we’re on Android (where the threading situation is cloudy
> at best to begin with) and the JNI (Java-Native Interface) has specific
> requirements about which threads its methods are run on. Let alone our
> graphics rendering code.
>
> Basically, initialising and using the JNI in separate
> DispatchQueue.main.async blocks apparently does not end up on the same thread
> (and apparently neither of them are the main thread). I’m quite confused by
> this.
>
> Are there any resources or docs to get up to scratch with the internals of
> Dispatch a bit better?
THe problem here is not Dispatch, it's how it's (mis-)ported to Android for now.
On other platforms, either you call dispatch_main() and there's no main thread
anymore, or from the main thread you are supposed to drain the Main CFRunloop
which in turn is integrated with dispatch (or rather the other way around:
dispatch is integrated with the main CFRunloop) and the main queue acts as a
source on the main CFRunloop.
Last I heard, Android has not done that. I tried to explain this on
https://github.com/apple/swift-corelibs-libdispatch/pull/299
<https://github.com/apple/swift-corelibs-libdispatch/pull/299> which atm is
still not resolved.
-Pierre
_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev