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

liz*_*isk 2 multithreading imagemagick image-processing thread-safety

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

Mic*_*nas 5

来自ImageMagick.org上的论坛帖子 - "线程安全吗?" :

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

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

另一篇文章 - "通过禁用线程我会失去什么?" :

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

从第三篇文章" - 禁用线程混淆":

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

因此,共识似乎是ImageMagick仍然在很大程度上使用线程安全--without-threads,导致执行速度较慢以及某些包装器,库或模块可能不是线程安全的(因此会"崩溃和烧毁") .

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

libjpeg.txt:

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