You could potentially yield to Julia from C instead. See
https://github.com/JuliaLang/julia/issues/6006 (use with caution...)

On Wed, Jun 17, 2015 at 7:54 AM, Tim Holy <tim.h...@gmail.com> wrote:

> Not sure it will help your specific use case, but see
>
> http://docs.julialang.org/en/release-0.3/manual/calling-c-and-fortran-code/#thread-safety
> and an example in
> https://github.com/JuliaGPU/CUDArt.jl/blob/master/src/stream.jl
>
> --Tim
>
>
> On Wednesday, June 17, 2015 12:29:18 AM yigiter.pub...@gmail.com wrote:
> > I need to call "waitformultipleobjects" (windows equivalent of "select"
> > call in linux) from julia using ccall. As this is a blocking function, I
> > would like to call it within another coroutine (task).
> >
> >
> >
> > The problem is that the “Taks” in Julia only function effectively if all
> > the blocking calls within it emanates from julia's own I/O interface. It
> > cannot deal with any blocking call to native C-functions.
> >
> >
> >
> > As far as I can see julia is based on Libuv. I guess every time a
> blocking
> > call (from defined I/O interface) is issued, julia internally calls a
> > corresponding function from the asynchronous libuv and then waits() for a
> > notify() from the libuv. I guess the entire scheduler of julia is based
> on
> > this paradigm so that It can deal with asynch operation within a single
> > thread.
> >
> >
> >
> > My question is, is it possible to extent this wait() - notify() paradigm
> > for any arbitrary blocking ccall call?
> >
> >
> >
> > I have tried the following solution, but it fails miserably:
> >
> > 0) Start a task which calls a non-blocking function from the dll and then
> > wait() for a notify().
> > 1)  (In C) Implement a dll which creates another thread to call the real
> > blocking function whenever julia calls the non-blocking function in the
> > previous step.
> >
> > 2) Provide a Julia callback function to the dll which is called at the
> > finalizing step of the thread by the dll.
> >
> > 3) (In Julia) the callback function calls the notify() function.
> >
> > However, it turned out that notify() function itself is not thread safe
> and
> > Julia’s respond to notify() from another thread (created in C) is totally
> > random.
> >
> > Is it possible to make the julia’s scheduler handle the arbitrary
> blocking
> > calls?
> >
> >
> >
> > (PS: I was previously advised a solution based on parallel processes.
> > However, for several reasons, multi-process paradigm is not a suitable
> > option for me right now.)
>
>

Reply via email to