EgtExecutor :

- in Redis migliorata la gestione dei Messaggi per thread concorrenti.
This commit is contained in:
Riccardo Elitropi
2025-12-09 10:05:29 +01:00
parent 50d92d366d
commit e177fd8ccd
+4 -2
View File
@@ -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 ;