On Thu, Oct 6, 2016 at 11:02 AM, Igor Cerovsky
<igor.cerov...@2bridgz.com> wrote:
> Hello,
>
> Calling compiled Julia 0.5 code from C++ (MSVS15) from multiple threads a
> code that follows fails.
>
> Consider following example under WIN using Julia 0.5:
> #include <thread>
> #include <iostream>
> #include "julia.h"
>
> //@Base.ccallable Int64 jl_foo(x::Int64) = (x + 1)
>
> void TestJl()
> {
>   jl_options.compile_enabled = JL_OPTIONS_COMPILE_OFF;
>   jl_options.startupfile = JL_OPTIONS_STARTUPFILE_OFF;
>   jl_options.use_precompiled = JL_OPTIONS_USE_PRECOMPILED_YES;
>   jl_init_with_image(NULL, "myJulia.dll");
>
>   jl_function_t *func1 = jl_get_function(jl_main_module, "jl_foo");
>   jl_value_t* in = jl_box_int64(1);
>   jl_value_t* ret = NULL;
>   JL_GC_PUSH2(&in, &ret);
>   // use computation in Julia here ...
>   ret = jl_call1(func1, in);
>   std::cout << "returned: " << jl_unbox_int64(ret) << "\n";
>   JL_GC_POP();
>
>   jl_atexit_hook(0);
> }
>
> int main()
> {
>   std::vector<std::thread> threads;
>   for (size_t i = 0; i < 5; ++i)
>   {
>     threads.emplace_back(std::thread{ TestJl });
>   }
>
>   for (size_t i = 0; i < threads.size(); ++i)
>   {
>     threads[i].join();
>   }
>
>   return 0;
> }
>
> Error message: ": for the -enable-tail-merge option: may only occur zero or
> one times!"
>
> Single threaded version (just call TestJL()) as well 1thread-version (1
> thread in the for loop) works fine.

You cannot initialize the runtime multiple times and we don't support
unmanaged threads at the moment.

Ref https://github.com/JuliaLang/julia/issues/17573

It's planned but since the threading support itself is still very
experimental this does not currently have high priority.

>
> Please, can anyone give some hints/explanation, if calling code from
> compiled Julia is possible from multiple threads?

Reply via email to