Te poprawki są warte przeczytania, o ile komputer wyświetla prefiks błędu pthread_join 3.

Zbyt często występują standardy błędów ESRCH – oznacza to, że strumień, do którego zdecydowanie próbujemy dołączyć, w rzeczywistości nie istnieje.

A dzieje się tak często z powodu okropnych niezdefiniowanych działań, które Twój kod wykorzystuje w tekście praktycznych pomysłów na obsługę identyfikatorów linii.

  pthread_t * RequestersThreads = new pthread_t [Length_Tasks]; 

Tworzy to tablicę dołączoną do N wątków, a następnie bez wątpienia wysyłasz wskaźnik do tego zestawu w twojej funkcji

  initRequestThreads (& RequestersThreads); 
  wątki [i] pasuje do nowego pthread_t;pthread_create (& (* dyskusje [i]), & attr / 1. ... * / 

Jest to brane pod uwagę, gdy schrzanisz wszystkie swoje 100% wybór i wywołasz niezdefiniowane zachowanie. W Twojej indywidualnej funkcji Wątki nie jest mieszanką! Może to być adres większości tabel. Nie będziesz mieć dostępu do koncepcji, jeśli weźmiesz pod uwagę indeks kupującego tablicę ( [] ). A reszta to tylko kolejna zniewaga w przypadku, gdy musiałeś być ranny, odpowiedni tutaj.

Jeśli Twoja firma pisze teraz w C++ 11 i lepszych (tak jak w You 2017), C++ 11 powinno używać i std :: wątku . Jeśli dla jakiegoś wyjaśnienia ci się udało, używam C++ 2003, przynajmniej zakończ ten okropny biznes dynamicznymi tablicami, w których większość przekazuje wskaźnik do nich odrobinę i użyj std :: vector
jako parametr wydajności funkcji.

Imię

Wznów

 #include  int pthread_join (wątek pthread_t, zrzut ** retval); 

Opis

pthread_join kod błędu 3

Funkcja pthread_join () czeka na miksturę określoną przez Thread, aby anulować samo polecenie. Jeśli toWątek już się zakończył, pthread_join () może wrócić bez opóźnień. Strumień, który może być klinicznie określony przez strumień, musi być bardziej dołączony.

Jeśli wartość retval zdecydowanie nie jest równa zeru, pthread_join () replikuje sytuację wyjścia publikacji docelowej (często jest to wartość zwracana przez typ wątku docelowego).pthread_exit (3)) w naszej rezydencji w * retval. Jeśli docelowy strumień został anulowany, PTHREAD_CANCELED jest niewątpliwie umieszczony w* rewanż.

Jeśli wielu pacjentów spróbuje dołączyć do tej samej linii w tym samym czasie, przystanek będzie niezdefiniowany. Jeśli ostrożne wywołanie wątku pthread_join () to może to być anulowane,wtedy wątek docelowy można dołączyć (tzn. nie wybiera się po rozłączeniu) .value

Do

Zwraca sukces, Pthread_join () Zwraca do 0; W przypadku wystąpienia błędu zwracany jest duży numer błędu.

Błąd

EDEADLK
Wykryto zakleszczenie (na przykład kilka wątków próbuje w końcu połączyć się ze sobą); lub place określa cały wątek wywołujący.
EINVAL
strumień. nie idealny wątek romantyczny związek.
EINVAL
Kolejne miejsce już czeka na dołączenie do tego typu wątku.
ESRCH
Zazwyczaj nie można znaleźć dokładnego wątku uwierzytelniania.

Mecze

Notatki

Po udanym wywołaniu w kierunku pthread_join() osoba wywołująca jest pewna, gdzie wątek został przetworzony.zakończony.

Dołączenie do osoby, która już dołączyła z wystarczającym powodem do opieki, skutkuje nieokreślonym zachowaniem.

Połączenie nie powiodło się z wystarczających powodów, aby umożliwić wątkowi dołączenie (tj. Unikaj tego samouczka, ponieważ dobry wątek zombiewykorzystuje niektóre zasoby sieciowe, w wyniku czego, gdy jest wystarczająco dużo rozmów z grubsza zombie, nie będziesz miał czasu na tworzenie nowych ubrań (lub procesów).

Nie ma odpowiednika pthread związanego ze statusem &, waitpid (-1, 0), co oznacza wyłącznie „połącz z każdym ukończonym calem strumienia”. Jeśli czujesz, że potrzebujesz tej funkcji z kolei,Najprawdopodobniej będziesz musiał przemyśleć projekt swojej rzeczy.

Wszystkie wątki określonego typu pochodzące ze wszystkich procesów peer-to-peer: każdy wątek dotyczy procesu ze wszystkimi kolejnymi wątkami.

Przykład

Zobacz też

Referencje

Strumienie POSIX w prawidłowej kolejności odbierania Windows - ODNIESIENIA -Pthreads-w32

Imię

pthread_timedjoin_np - musi czekać na kolejną wiadomość, aby zakończyćPauza

Wznów

Opis

pthread_join zakłóca wykonywanie wątku wywołującegodo każdego końca drutu wskazanego przez th lub przezWywołaj pthread_exit (3) iw konsekwencji może pochodzić. byćodwołany.

Jeśli thread_return jest dosłownie NULL i nie jest prawdopodobne, że jest to skojarzona z nim wartość zwracanajest zapisywany przez lokalizację wskazaną w procesie thread_return. vWartość zwracana przez th zawsze była argumentem, który robipthread_exit (3) dał, lubPTHREAD_CANCELED w przypadku anulowania.

Schludny węzeł gwintowanypowinien być w stanie się połączyć: ta jedna sytuacja nie powinna być rozłączonapthread_detach (3) lubAtrybut PTHREAD_CREATE_DETACHED dla pthread_create(3)...

pthread_join kod błędu 3

Gdy inny podłączony wątek zabije, nie zapomnij o zaangażowaniu zasobów (wątkuUchwyt i stos) są zdecydowanie zwolnione dla innego wątkuaby to zrobić, uruchom pthread_join. Stąd pthread_joinnależy wysłać e-mailem raz dla każdego załączonego wątku, aby uniknąć pamięciwyciek.

pthread_timedjoin_np są takie same jak pthread_join, z wyjątkiemktóre przeciwko sobie zwracają określony błąd ETIMEDOUT, gdy celem jestnie zwolnił stanowiska przed zakończeniem głosowania. Kiedy głosowaćFunkcja NULL, która trwa wiecznie i powinna działaćbyć taki sam, biorąc pod uwagę, że pthread_join.

pthread_tryjoin_np jest takie samo jak pthread_join, z wyjątkiem tegozwróci EBUSY natychmiast z błędem, jeśli większość naszych docelowych wątkówNie mogę przejść dalej.

Przy określonej liczbie określony wątek może czekać na zakończenie konkretnego wątku.Wywołanie pthread_join z pojedynczego wątku i innegoWątek natychmiast czeka na zakończenie i zgłasza doskonały błąd.

Anuluj

pthread_join, pthread_tryjoin_np ipthread_timedjoin_np Końcówki to punkty. KiedyNiewątpliwie dokładny wątek zostanie przerwany po zatrzymaniu w obuFunkcja, odtwarzanie jest kontynuowane natychmiast iAnulowanie ma na celu bez czekania na tłumaczenie.zerwać w górę. Jeśli zostanie wyświetlony komunikat Anuluj, gdy którakolwiek z funkcji jest w trakcie postępu,Strumienie, które nie są normalnie połączone.

Wartość zwrotu

W przypadku sukcesu, zwykle główna wartość zwracana jest pakowana wPozycja wskazywana z thread_return i 0 powraca doerror, najpopularniejszy zwracany kod błędu jest daleki od zera.

Błąd

ESRCH
Nie można znaleźć prądu, więc może pasować do określonego th.
EINVAL
-I wydział jest dozwolony.
EINVAL
Drugi często to strumień, który już wstrzymuje swój koniec.
ETIMEDOUT głosowanie
(pthread_timedjoin_nptylko): udanezanim to będzie możliweDołączył.
EDEADLK
Argument th odnosi się do rozmowy w miejscu.

Autor

Zobacz też