Article View: pl.comp.lang.c
Article #308508Re: Kolejka, wątki dla Linuxa i C++
From: 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
Technical Details
Message-ID:
<ng7ic1$1o1$1@portraits.wsisiz.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!wsisiz.edu.pl!.POSTED.d40a9baa.rev.stofanet.dk!not-for-mailReferences:
<ng4f5c$lcc$1@node2.news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!wsisiz.edu.pl!.POSTED.d40a9baa.rev.stofanet.dk!not-for-mail From: "Matt D." <no-spam@invalid.local> Newsgroups: pl.comp.os.linux.programowanie,pl.comp.lang.c Subject: Re: Kolejka, wątki dla Linuxa i C++ Date: Mon, 2 May 2016 14:49:08 +0200 Organization: http://www.wit.edu.pl Sender: mdziubin@nospam.wsisiz.edu.pl Message-ID: <ng7ic1$1o1$1@portraits.wsisiz.edu.pl> References: <ng4f5c$lcc$1@node2.news.atman.pl> Mime-Version: 1.0 Injection-Date: Mon, 2 May 2016 12:49:05 +0000 (UTC) Injection-Info: portraits.wsisiz.edu.pl; posting-host="d40a9baa.rev.stofanet.dk:212.10.155.170"; logging-data="1793"; mail-complaints-to="abuse@wsisiz.edu.pl" User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.0 In-Reply-To: <ng4f5c$lcc$1@node2.news.atman.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit