AcquireSemaphore() is light-weight. There is a fair bit of overhead when starting ImageMagick so if you have a short quick task the start-up costs are high. The start-up cost becomes negligible for longer running tasks.
You can initalize any of the ImageMagick lists before threading is enabled by calling the Get????Info("*",exception) method for the list. For example, to preload the type configuration list, call
- GetTypeInfo("*",exception);
before you fire up threads. However, without threading enabled in ImageMagick, it will probably blow up at some point if you fire multiple threads, perhaps when the program is exiting.