我使用多个线程通过ImageMagick加载图像。配置--without-threads
选项后是否安全?
答案 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库目前不是线程安全的。