🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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++
#72805
Author: Borneq
Date: Sun, 01 May 2016 08:35
3 lines
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++
#72806
Author: 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
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