我有一个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。我是并行编程和线程的新手。任何帮助将不胜感激!
答案 0 :(得分:0)
几个指针: 1.有初始化调用,肯定会修改全局状态,尝试一次 2.有时c dll根本不是线程安全的,有时它们是本地线程安全的。如果是parallel.for你将重新使用相同的线程,所以如果你为每个图像明确地尝试一个线程,你可能会更好。
此外,搜索提示:&#34; libtiff线程安全&#34;