Aktywne Wpisy

Konkretnyknur +17

kubanfs +2
#powodz Najważniejsze że wojsko w koszarach pompki robi albo na poligonie 50km dziennie biegiem dlaczego nikt wojska nie postawił w pełnej gotowości żeby teraz mogli na miejscu kilka godzin po powodzi pomoc w odgruzowywaniu miasteczek?





Zaimplementowałem kolejkę thread-safe, standardowo jeden thread do niej pisze, drugi czyta i parsuje dane. Kłopot polega na tym, że thread, który zapisuje czasami musi zbyt długo czekać na zwolnienie kolejki przez co są gubione porcje danych, bo blokowane jest odbieranie. Czy zapis do kolejki odebranej porcji danych powinienem puszczać w osobnych taskach, żeby nie blokować odbierania? Czy jest jakiś mądrzejszy sposób?
#programowanie #programista15k #cpp
przykład 1:
pisarz najpierw wpisuje dane, a potem przesuwa wskaźnika koniec kolejki
czytelnik najpierw odczytuje a potem przesuwa wskaźnik początku
std::vectori wsadzałby go do kolejki. Koszt: jak użyjeszstd::moveto kilka cykli procesora, wystarczy przepisać kilka liczb i wskaźnik. Wątek czytający bierze ten wektor z kolejki, kosz sekcjiDane są odbierane asynchronicznie i wpisywane do bufora - wykorzystuję do tego asio.
Dane są parsowane w osobnym
1. jak już wspomniano, przechowuj całe paczki bajtów, to będzie je łatwo wyekstrachować np. jezeli będą pod jakimś uniqueptr. myk robimy move na uniqueptr i jest cała paczka dostępna.
2. ten lock przy back() i front() to pchanie się w gips, robisz locka przy pobraniu adresu, a potem już droga wolna do modyfikacji konteneru przez kogokolwiek i zostajesz ze smieciowym adresem
3. te unique_locki bez std::locka afaik
@Parseval: brzmi jak prosty std::unique_ptr>
@Parseval: dokładasz adapter nad tą kolejką, który trzyma kolejkę, chunk i indeks w chunku. interfejsem adaptera będzie zwracanie pojedynczego bajtu, a pod spodem pobierasz chunk i zapamietujesz go, a następny pobierasz dopiero jak wypstrykasz się z bajtów w ostatnio pobranym