Sorry, "data" and "status".

On Mon, Apr 7, 2014 at 1:48 PM, Stefan Karpinski <[email protected]>wrote:

> What are done and status here?
>
>
> On Sat, Feb 1, 2014 at 9:52 AM, Tim Holy <[email protected]> wrote:
>
>> Thanks Jameson, that worked great.
>>
>> Since this took me into areas of Julia that I hadn't previously explored,
>> I
>> thought I'd post a complete example below. I suspect that something along
>> these lines needs to be added to
>> http://docs.julialang.org/en/latest/manual/calling-c-and-fortran-
>> code/#passing-julia-callback-functions-to-c<http://docs.julialang.org/en/latest/manual/calling-c-and-fortran-code/#passing-julia-callback-functions-to-c>
>> Thoughts?
>>
>> --Tim
>>
>>
>> # Writing thread-safe callback functions for interfacing with
>> # C libraries. As an example, this uses wait/notify on a condition.
>>
>> c = Condition()
>>
>> # Here's your function that you'd like to be the callback function.
>> # This will get executed indirectly, by scheduling it to run from the
>> # Julia event loop. It must have two inputs (which will have
>> # types SingleAsyncWork and Cint, respectively).
>> runnotify = (data, status) -> notify(c)
>>
>> # Create an object that can be used to schedule a call of runnotify
>> # by Julia's event loop
>> notifyasync = Base.SingleAsyncWork(runnotify)
>>
>> # Now create a C callback function that will issue uv_async_send, passing
>> # notifyasync.handle as its input.
>> # It should be set up to match the expected syntax of the C callback.
>> # Here we do it for the callback syntax of pthread_create.
>> async_send_pthread(func::Ptr{Void}) = (ccall(:uv_async_send,Cint,
>> (Ptr{Void},),func); C_NULL)
>> const c_async_send_pthread = cfunction(async_send_pthread, Ptr{Void},
>> (Ptr{Void},))
>>
>> threads = Uint64[0]
>>
>> @sync begin
>>     @async begin
>>         println("About to wait from 1")
>>         wait(c)
>>         println("Done waiting from 1")
>>     end
>>     @async begin
>>         println("About to notify from 2")
>>         # Perform the equivalent of notify(c) from a new thread
>>         ccall(:pthread_create, Cint, (Ptr{Void}, Ptr{Void}, Ptr{Void},
>> Ptr{Void}),
>>               threads, C_NULL, c_async_send_pthread, notifyasync.handle)
>>         ccall(:pthread_join, Cint, (Uint64, Ptr{Void}), threads[1],
>> C_NULL)
>>         println("Done notifying from 2")
>>     end
>>     nothing
>> end
>>
>>
>

Reply via email to