sto cercando di sostituire boost::lockfree::queue
per std::queue
in questo websocket ++ esempio https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppè boost :: lockfree :: queue not lockfree con C++ 11?
Sembra che può essere fatto senza realmente cambiare qualsiasi sintassi ancora rimuovendo le boost::unique_lock
linee.
Tuttavia, quando guardo l'esempio spinta, ha una sezione di codice che controlla lockfree http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html
Quando guardo attraverso i documenti sul lockfree::queue
, si dice questo su is_lock_free()
http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.html:
bool is_lock_free (void) const;
Warning
It controlla solo, se la testa coda e nodi di coda e la freelist possono essere modificati in modo senza blocchi. Sulla maggior parte delle piattaforme, l'intera implementazione è bloccata, se questo è vero. Utilizzando l'atomizzazione in stile C++ 0x, non è possibile fornire un'implementazione completamente accurata, poiché è necessario testare ogni nodo interno, , impossibile se ulteriori nodi verranno allocati dal sistema operativo .
Restituisce: true, se l'implementazione è bloccata.
Non ho idea di cosa siano gli "atomi di stile 0x in C++", ma sono abbastanza sicuro che C++ 0x significhi C++ 11.
Sto usando C++ 11 e semplicemente sostituendo boost::lockfree::queue
per std::queue
, quindi questo non sarà implementato senza blocco?
Vi esorto a misurare prima di commettere algoritmi privi di lock - sono accurati ma progettati per essere _scalable_ e _safe_ (cioè prevenire l'inversione di priorità) - le prestazioni sono meno preoccupanti e tipicamente peggiori. Ad esempio, l'implementazione della coda senza blocco di Boost sarà più lenta di una 'std :: queue 'bloccata a meno che tu non abbia diversi core e una quantità molto alta di contesa. –
'Non ho idea di cosa stiano" C++ 0x-style atomics "sta parlando di [boost :: atomic] (http://www.boost.org/doc/libs/1_53_0_beta1/doc/html/atomic. html) su cui si basa la libreria. –
+1 per l'esempio lib – ExoticBirdsMerchant