Thread View: pl.comp.os.linux.programowanie
2 messages
2 total messages
Started by Borneq
Sun, 01 May 2016 08:35
Kolejka, wątki dla Linuxa i C++
Author: Borneq
Date: Sun, 01 May 2016 08:35
Date: Sun, 01 May 2016 08:35
3 lines
1045 bytes
1045 bytes
Czy kolejka std::queue jest bezpieczna wątkowo? Jak napisać pod Linuxem dwie klasy, z których jedna w wątku (lub głównym) będzie zapisywała do kolejki a druga w wątku odczytywała?
Re: Kolejka, wątki dla Linuxa i C++
Author: Matt D.
Date: Mon, 02 May 2016 12:49
Date: Mon, 02 May 2016 12:49
53 lines
3290 bytes
3290 bytes
On 5/1/2016 10:35 AM, Borneq wrote: > Czy kolejka std::queue jest bezpieczna wątkowo? Nie zabezpieczona -- nie do zapisu: http://stackoverflow.com/questions/21302142/is-stdqueue-thread-safe-with-producer-and-multiple-consumers http://stackoverflow.com/questions/1164023/is-there-a-production-ready-lock-free-queue-or-hash-implementation-in-c W starszych zrodlach mozesz znalezc porady, aby problem "rozwiazac" zabezpieczajac dany kontener, n.p., mutexem. Dzisiaj jednak nie radze siegac do zabezpieczania calych kontenerow mutexami -- to zabije wydajnosc i skalowalnosc (przy wzrastajacej ilosci cores wydajnosc moze zaczac spadac, zamiast rosnac). Moze byc lepiej uzyc lock-free -- patrz nizej. // Inny przyklad jak, IMHO, tego lepiej nie robic -- https://software.intel.com/en-us/articles/single-producer-single-consumer-queue -- `volatile` to tutaj za malo / nie daje zadnych gwarancji wielowatkowych; memory barrier to tutaj za duzo -- czesto wystarczy para jednostronnych transakcji atomicznych (acquire-release). > Jak napisać pod Linuxem dwie klasy, z których jedna w wątku (lub > głównym) będzie zapisywała do kolejki a druga w wątku odczytywała? Jesli chcesz jeden producent i jeden konsument, to szukasz single-producer, single-consumer (SPSC) lock-free queue (ringbuffer). Jesli wiecej niz jeden, to multi-, n.p., MPMC -- ale nie uzywaj jesli nie potrzebujesz, dla prostszego wariantu SPSC mozna zagwarantowac wait-free, znacznie silniejsza gwarancja od lock-free. Terminologia: http://www.boost.org/doc/libs/master/doc/html/lockfree.html#lockfree.introduction___motivation.introduction__amp__terminology Tutaj jest porzadny przyklad: https://github.com/cameron314/readerwriterqueue opis: http://moodycamel.com/blog/2013/a-fast-lock-free-queue-for-c++ Zobacz tez: http://kukuruku.co/hub/cpp/lock-free-data-structures-exploring-queues Boost.Lockfree -- boost::lockfree::spsc_queue http://boost.org/libs/lockfree CDS: Concurrent Data Structures library https://github.com/khizmax/libcds W szczegolnosci: http://libcds.sourceforge.net/doc/cds-api/namespacecds_1_1container.html Ogolne wprowadzenie do programowania lock-free: http://preshing.com/20120612/an-introduction-to-lock-free-programming/ Pozdrawiam, Matt
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads