diff --git a/EXE_Redis.cpp b/EXE_Redis.cpp index a0d04a0..23dcc02 100644 --- a/EXE_Redis.cpp +++ b/EXE_Redis.cpp @@ -717,10 +717,11 @@ RedisPubSubUnsubMsgCallback( redisAsyncContext* ctx, void* r, void*) if ( Iter != vAsyncRedisMessages.end()) { RedisAsyncMessage& LockedMessage = Iter->second ; while ( LockedMessage.Lock.test_and_set( memory_order_acquire)) - this_thread::sleep_for( chrono::nanoseconds{ 1}) ; + LockedMessage.Lock.wait( true, memory_order_relaxed) ; ++ LockedMessage.nCount ; LockedMessage.sMessage = sMessage ; LockedMessage.Lock.clear( memory_order_release) ; + LockedMessage.Lock.notify_all() ; } } else { @@ -1373,10 +1374,11 @@ ExeRedisAsyncGetMessage( int nIdConnection, const string& sChannel, int& nCount, else { RedisAsyncMessage& LockedMessage = Iter->second ; while ( LockedMessage.Lock.test_and_set( memory_order_acquire)) - this_thread::sleep_for( chrono::nanoseconds{ 1}) ; + LockedMessage.Lock.wait( true, memory_order_relaxed) ; nCount = LockedMessage.nCount ; sMessage = LockedMessage.sMessage ; LockedMessage.Lock.clear( memory_order_release) ; + LockedMessage.Lock.notify_all() ; } return true ;