diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6f3c000ff260e019cf821927f15dd3f595b58c0b..1af81b592cd9ffe858a85afcfeb32de3907271ec 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,8 +42,8 @@ if (vkcv_build_debug)
 	endif()
 endif()
 
-if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10.0.0"))
-	set(vkcv_flags ${vkcv_flags} " -std=c++2a -std=gnu++2a")
+if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11.0.0"))
+	list(APPEND vkcv_definitions __NO_SEMAPHORES__)
 endif()
 
 # configure everything to use the required dependencies
diff --git a/include/vkcv/Event.hpp b/include/vkcv/Event.hpp
index edb8131a3afc8d6f65750731f67d94450fadb016..0a5cc1f0d93b6eebea6a54cd8d48632ea4c0be31 100644
--- a/include/vkcv/Event.hpp
+++ b/include/vkcv/Event.hpp
@@ -3,8 +3,12 @@
 #include <functional>
 
 #ifndef __MINGW32__
+#ifdef __NO_SEMAPHORES__
+#include <mutex>
+#else
 #include <semaphore>
 #endif
+#endif
 
 #include <vector>
 
@@ -34,7 +38,11 @@ namespace vkcv {
         uint32_t m_id_counter;
 	
 #ifndef __MINGW32__
+#ifdef __NO_SEMAPHORES__
+		std::mutex m_mutex;
+#else
 		std::binary_semaphore m_semaphore;
+#endif
 #endif
 
     public:
@@ -84,7 +92,11 @@ namespace vkcv {
          */
         void lock() {
 #ifndef __MINGW32__
+#ifdef __NO_SEMAPHORES__
+			m_mutex.lock();
+#else
 			m_semaphore.acquire();
+#endif
 #endif
         }
 	
@@ -93,15 +105,27 @@ namespace vkcv {
 		*/
         void unlock() {
 #ifndef __MINGW32__
+#ifdef __NO_SEMAPHORES__
+			m_mutex.unlock();
+#else
 			m_semaphore.release();
+#endif
 #endif
         }
 
         explicit event(bool locked = false)
 #ifndef __MINGW32__
+#ifndef __NO_SEMAPHORES__
 		: m_semaphore(locked? 1 : 0)
 #endif
-		{}
+#endif
+		{
+#ifndef __MINGW32__
+#ifdef __NO_SEMAPHORES__
+			if (locked) m_mutex.lock();
+#endif
+#endif
+		}
 
         event(const event &other) = delete;