diff --git a/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp b/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
index c809d2c..e82ea19 100644
--- a/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
+++ b/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
@@ -29,6 +29,8 @@
 #include "lldb/Utility/Log.h"
 
 // C++ Includes
+#include <thread>
+
 // C Includes
 
 using namespace lldb;
@@ -517,17 +519,32 @@ void DynamicLoaderPOSIXDYLD::LoadAllCurrentModules() {
   m_process->PrefetchModuleSpecs(
       module_names, m_process->GetTarget().GetArchitecture().GetTriple());
 
+  struct loader {
+    std::thread t;
+    ModuleSP m;
+    DYLDRendezvous::iterator I;
+  };
+  std::list<loader> loaders;
   for (I = m_rendezvous.begin(), E = m_rendezvous.end(); I != E; ++I) {
-    ModuleSP module_sp =
-        LoadModuleAtAddress(I->file_spec, I->link_addr, I->base_addr, true);
-    if (module_sp.get()) {
-      module_list.Append(module_sp);
+    loaders.push_back(loader());
+    auto * last = &loaders.back();
+    last->I = I;
+    last->t = std::thread([this, last]()
+    {
+      last->m = LoadModuleAtAddress(
+        last->I->file_spec, last->I->link_addr, last->I->base_addr, true);
+    });
+  }
+  for (auto & l : loaders) {
+    l.t.join();
+    if (l.m.get()) {
+      module_list.Append(l.m);
     } else {
       Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER));
       if (log)
         log->Printf(
             "DynamicLoaderPOSIXDYLD::%s failed loading module %s at 0x%" PRIx64,
-            __FUNCTION__, I->file_spec.GetCString(), I->base_addr);
+            __FUNCTION__, l.I->file_spec.GetCString(), l.I->base_addr);
     }
   }
 
