在C#中调用Parallel.For内的本机dll会抛出System.AccessViolationException

时间:2015-12-26 19:02:54

标签: c# multithreading dll parallel-processing thread-safety

我有一个C ++ DLL,它使用OpenCV和Libtiff进行一些图像处理。它在给定输入文件(专有格式)的情况下创建多页tif文件,一次一个文件。

我有一个C#类,我在循环中为所有需要转换的文件调用这个dll。当我从正常for循环调用dll时,它工作正常。当我尝试从Parallel调用它时。它崩溃并抛出System.AccessViolationException。

dll代码:

if(write(sd,mTrimis,sizeof(mTrimis))<0)

C#dll致电:

write

从正常for循环调用时没有错误,仅来自Parallel.For。我是并行编程和线程的新手。任何帮助将不胜感激!

例外: enter image description here

调用堆栈: enter image description here

1 个答案:

答案 0 :(得分:0)

几个指针: 1.有初始化调用,肯定会修改全局状态,尝试一次 2.有时c dll根本不是线程安全的,有时它们是本地线程安全的。如果是parallel.for你将重新使用相同的线程,所以如果你为每个图像明确地尝试一个线程,你可能会更好。

此外,搜索提示:&#34; libtiff线程安全&#34;