使用`--without-threads`选项,ImageMagick线程是否安全?

时间:2015-04-01 18:11:25

标签: multithreading image-processing thread-safety imagemagick

我使用多个线程通过ImageMagick加载图像。配置--without-threads选项后是否安全?

1 个答案:

答案 0 :(得分:5)

来自ImageMagick.org上的论坛帖子 - "thread safe ?"

  

ImageMagick是线程安全的,我们在使用和不使用valgrind的发布之前执行数千次测试。

这篇文章还包括一个样本单元测试ImageMagick使用

另一篇文章 - "What do I lose by disabling threads?"

  

ImageMagick在没有线程的情况下工作正常。但是,许多ImageMagick语言包装器假设一个线程化的环境,当他们从多个执行线程调用ImageMagick方法时,它们的应用程序将崩溃并烧毁。启用线程后,ImageMagick会应用多个互斥锁来序列化splay-tree,hash,list方法,生成Wand ID等。

来自第三篇帖子"--disable-thread confusion"

  

ImageMagick是线程安全的,但有些编码器模块不是(例如JPEG)。如果编码器模块不是线程安全的,我们使用自己的互斥锁序列化对模块的访问。更新版本的ImageMagick区分编码器模块线程支持读取和写入(一些模块在读取图像时有线程但不用于写入,反之亦然)。

因此,共识似乎是ImageMagick仍然在很大程度上使用--without-threads进行线程安全,其结果是执行速度较慢以及某些包装器,库或模块可能不是线程安全的(并且因此会“崩溃和燃烧”。)

直接回答您的多线程读取问题,但这取决于您正在使用的库 - 例如,如果您使用的是JPEG委托库,则它不是线程安全的(下面的源代码)。

libjpeg.txt:

  

注意:JPEG库目前不是线程安全的。