Hlavní navigace

Názor ke článku C++20: Jak se budí korutiny od František Ryšánek - Omluva za exhumaci, čtu diskusi po delší době...

  • 19. 2. 2023 0:03

    František Ryšánek

    Omluva za exhumaci, čtu diskusi po delší době od publikace.
    A nepobírám korutiny, a jsem hobbík, ale kdysi jsem psal nějaký protokolový stack, který dělal request/response (modbusovou gateway). Takže chci zareagovat na toto:

    Zastavování producera může vést k deadlocku. Například pokud je ta fronta oboustraná tedy ten vztah je symetrický a obě strany se přeplní. Takový pattern request-response, kdy requester vygeneruje tolik requestů, že zaplní request frontu zatímco responder zaplní response frontu. Pak requester místo aby vybíral respond frontu je bloklý na request frontě, která je plná. Znám moc dobře tyhle bolestivé situace z praxe.

    Toto jsem rozdělil do dvou vláken. Jedno pro TX (request), druhé pro RX (response). Každé vlákno smí nést riziko "usnutí na neurčito" (zablokování) pouze v jednom bodě - a pokud se pracuje s frontou ošetřenou pomocí podmínkové proměnné, tak k tomu blokování třeba při čekání na I/O nesmí dojít při zamčeném mutexu této fronty+proměnné. Kritická sekce kolem "manipulace s frontou" má být minimalistická, má se vrátit bez zbytečného zdržování a bez rizika náhodných chybových stavů.