解密FreeBSD 13.2上的OpenMP与ImageMagick问题
在最近的系统更新到FreeBSD 13.2(RELEASE-p9)后,我们遇到了一个令人头疼的问题:在使用OpenMP与ImageMagick处理图像时,进程会随机锁定在100%的CPU使用率上,无法完成任务。通过调试,我们发现这些进程实际上陷入了sched_yield()的无限循环中。这篇博客将详细探讨这个问题的原因、影响以及可能的解决方案。问题描述我们的系统配置如下:操作系统: FreeBSD 13.2-RELEASE-p9PHP版本: 8.1.27(CLI)ImageMagick版本: 7.1.1-26在使用OpenMP与ImageMagick处理图像时,某些进程会在执行过程中卡住,并显示以下调试信息:(gdb) thread apply all bt Thread 1 (LWP 101575 of process 33247): #0 sched_yield () at sched_yield.S:4 #1 0x00000008456d0491 in __kmp_wait_4_ptr (...) at /usr/src/contrib/llvm-project/openmp/runtime/src/kmp_dispatch.cpp:2695 ...从上面的调试信息可以看出,进程在尝试获取锁时陷入了一个循环,导致无法继续执