🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72806

Re: Kolejka, wątki dla Linuxa i C++

#72806
From: Matt D.
Date: Mon, 02 May 2016 12:49
53 lines
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-mail
References: <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