使用Threads。@ threads运行ccall时出现分段错误

我正在使用Julia(1.2.0)中的ccall来调用我在一个运行于多个内核的循环中创建的c函数:

Threads.@threads for i in 1:10   
       ccall((:myfunction,"myclib",(...),input[i])
end

该实现在没有Threads。@ threads的情况下运行良好,但是当我使用Threads。@ threads时由于分段错误而崩溃,我也不知道为什么。我检查了我在myclib中使用的所有c函数,它们都是线程安全的。

我的问题如下:在这种实现中,在c线程上运行的功能是独立的还是以某种方式链接在一起?例如,它们共享全局变量吗?还是堆栈内存限制独立地适用于每个线程或适用于所有线程使用的内存?

感谢您的帮助,

迪伦

jiulongrushui 回答:使用Threads。@ threads运行ccall时出现分段错误

我通过删除c中myfunction的所有全局变量来解决了这个问题。但是,我不太了解使用多线程的ccall调用c函数时全局变量如何工作。

本文链接:https://www.f2er.com/3132430.html

大家都在问