próbuję zastąpić boost::lockfree::queue
dla std::queue
w tym websocket ++ przykład https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppis boost :: lockfree :: queue not lockfree with C++ 11?
Wygląda jak można to zrobić bez zmieniania żadnych składni naprawdę jeszcze usuwając boost::unique_lock
linie.
Jednak kiedy patrzę na przykład doładowania, ma sekcję kodu, który sprawdza lockfree http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html
Kiedy patrzę przez docs na lockfree::queue
, to mówi to na is_lock_free()
http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.html:
bool is_lock_free (void) const;
ostrzegawczy
on jedynie sprawdza, czy głowica kolejki i węzły ogona i freelist mogą być modyfikowane w sposób wolny od zamka. Na większości platformach cała implementacja jest blokowana, o ile to prawda. Używając atomów w stylu C++ 0x , nie ma możliwości zapewnienia całkowicie dokładnej implementacji , ponieważ trzeba przetestować każdy węzeł wewnętrzny, , co jest niemożliwe, jeśli kolejne węzły zostaną przydzielone z systemu operacyjnego .
Zwraca: prawda, jeśli wdrożenie jest blokowane.
Nie mam pojęcia, czym są "atomizery w stylu C++ 0x", ale jestem całkiem pewny, że C++ 0x oznacza C++ 11.
Używam C++ 11 i tylko zastępuję boost::lockfree::queue
dla std::queue
, więc czy nie zostanie to zaimplementowane jako blokada?
Zachęcam do pomiarów przed zatwierdzeniem algorytmów bez blokady - są one schludne, ale zaprojektowane tak, aby były _scalable_ i _safe_ (tj. Zapobiegają inwersji priorytetów) - wydajność jest mniej niepokojona i zazwyczaj gorsza. Na przykład implementacja kolejki wolnej od Boosta będzie wolniejsza niż zablokowana 'std :: queue', chyba że masz kilka rdzeni i bardzo dużą ilość rywalizacji. –
'Nie mam pojęcia, co" atomic w stylu C++ 0x "mówi" o [boost :: atomic] (http://www.boost.org/doc/libs/1_53_0_beta1/doc/html/atomic. html), na którym opiera się biblioteka. –
+1 dla przykładu lib – ExoticBirdsMerchant