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.