widelec w programie wielowątkowym

Słyszałem, że miksowanie rozwidleń i wątków w programie może być bardzo problematyczne, często powodując tajemnicze zachowanie, zwłaszcza w przypadku zasobów współdzielonych, takich jak blokady, potoki, deskryptory plików. Ale nigdy nie rozumiem w pełni, jakie dokładnie są zagrożenia i kiedy mogą się zdarzyć. Byłoby wspaniale, gdyby ktoś z doświadczeniem w tej dziedzinie mógł wyjaśnić nieco bardziej szczegółowo, jakie są pułapki i co należy zachować ostrożność podczas programowania w takim środowisku.

Na przykład, jeśli chcę napisać serwer, który zbiera dane z różnych różnych zasobów, jednym z rozwiązań, które myślałem, jest to, że serwer spawnuje zestaw wątków, każdy popen wywołuje inny program do wykonania rzeczywistej pracy, otwiera rury odzyskać dane od dziecka. Każdy z tych wątków odpowiada na własną pracę, nie zmienia się danych w b / w, a kiedy dane są zbierane, główny wątek ma kolejkę, a te wątki robocze po prostu umieszczają wynik w kolejce. Co może pójść nie tak z tym rozwiązaniem?

Proszę nie zawężać swojej odpowiedzi, po prostu „odpowiadając” na mój przykładowy scenariusz. Wszelkie sugestie, alternatywne rozwiązania lub doświadczenia, które nie są związane z przykładem, ale pomocne w zapewnieniu czystego projektu, byłyby świetne! Dzięki!

questionAnswers(2)

yourAnswerToTheQuestion