Część aplikacji, nad którą pracuję, to prosty serwer oparty na pthread, który komunikuje się przez gniazdo TCP/IP. Piszę to w C, ponieważ będzie działał w środowisku z ograniczoną pamięcią. Moje pytanie brzmi: co powinien zrobić program, jeśli jeden z wątków napotka obiekt malloc(), który zwraca NULL? Możliwości, które do tej pory wymyśliłem:W jaki sposób wielowątkowa aplikacja C radzi sobie z nieudanym malloc()?
- Bez specjalnej obsługi. Niech funkcja malloc() zwróci wartość NULL i pozwoli na jej dereferencję, tak aby cała sprawa uległa uszkodzeniu.
- Zamknij natychmiast niepowodzenie malloc(), wywołując abort() lub exit (-1). Załóżmy, że środowisko wszystko oczyści.
- Wyskocz z głównej pętli zdarzeń i spróbuj pthread_join() wszystkich wątków, a następnie zamknij system.
Pierwsza opcja jest oczywiście najłatwiejsza, ale wydaje się bardzo błędna. Drugi również wydaje się błędny, ponieważ nie wiem dokładnie, co się stanie. Trzecia opcja wydaje się kusząca, z wyjątkiem dwóch problemów: po pierwsze, wszystkie wątki nie muszą być łączone z powrotem do głównego wątku w normalnych okolicznościach, a po drugie, aby zakończyć wykonywanie wątku, większość pozostałych wątków będzie musiała wywoływać malloc () jeszcze raz.
Co mam zrobić?
Po pierwszej lekturze, myślałem 2) powiedział: "Załóżmy, że rząd wszystko posprząta". :) – Rob
@Rob czytanie zbyt wiele wiadomości o wycieku ropy, co? –
@Rob - tak, musimy tylko deregulować 'malloc()', aby zachęcić większą konkurencję między procesami .. co może pójść nie tak? –