Groups 183 of 99+ julia-users › call compiled Julia image from multiple threads in C++ 3 posts by 2 authors Igor Cerovsky Oct 6 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 #include #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 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. Please, can anyone give some hints/explanation, if calling code from compiled Julia is possible from multiple threads? Yichao Yu Oct 6 - show quoted text - 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. - show quoted text - Igor Cerovsky Oct 7 Thanks for quick answer. Is there a best practice to achieve similar behavior - calling compiled Julia code in parallel?