blueloveTH 2 лет назад
Родитель
Сommit
1e89045f82
2 измененных файлов с 12 добавлено и 1 удалено
  1. 10 0
      src/common.h
  2. 2 1
      src/memory.h

+ 10 - 0
src/common.h

@@ -62,8 +62,18 @@
 
 #if PK_ENABLE_THREAD
 #define THREAD_LOCAL thread_local
+#include <mutex>
+
+struct GIL {
+	inline static std::mutex _mutex;
+    explicit GIL() { _mutex.lock(); }
+    ~GIL() { _mutex.unlock(); }
+};
+#define GLOBAL_SCOPE_LOCK() auto _lock = GIL();
+
 #else
 #define THREAD_LOCAL
+#define GLOBAL_SCOPE_LOCK()
 #endif
 
 /*******************************************************************************/

+ 2 - 1
src/memory.h

@@ -175,6 +175,7 @@ struct MemoryPool{
     void* alloc() { return alloc(sizeof(__T)); }
 
     void* alloc(size_t size){
+        GLOBAL_SCOPE_LOCK();
 #if DEBUG_NO_MEMORY_POOL
         return malloc(size);
 #endif
@@ -199,6 +200,7 @@ struct MemoryPool{
     }
 
     void dealloc(void* p){
+        GLOBAL_SCOPE_LOCK();
 #if DEBUG_NO_MEMORY_POOL
         free(p);
         return;
@@ -238,7 +240,6 @@ struct MemoryPool{
     }
 };
 
-// TODO: make them thread-safe
 inline MemoryPool<64> pool64;
 inline MemoryPool<128> pool128;