wątki - detach

0

Witam
Co się dzieje z wątkiem3 po wykonaniu tego kodu? On zostaje przerwany i zabity w momencie zakończenia wątku głównego, czyli inaczej zakończenia całego procesu na ktory składają się 2 wątki: main i watek3?
Jakbyśmy dalli system("PAUSE") na końcu maina to oczywiście wątek3 działałby sobie dalej, zakończyłby się po 500 sekundach jeżeli nikt by nie stuknął w konsoli klawisza.

void watek3(const int& x, const double& y)
{
    cout << "x=" << x << " ,y=" << y << endl;
    this_thread::sleep_for(chrono::seconds(500));
    cout << "Koniec ThreadTest()::watek3" << endl;
}

int main()
{
    cout << "\nTest 4" << endl;
    thread watek4(watek3, 7, 8.88);
    watek4.detach();
    cout << "Koniec ThreadTest()" << endl;
   return 0;
}
```
1

Tak, na obydwóch wątkach jest wołany terminate w momencie zamykania procesu przez system. Tak, jeśli dodasz pauze na końcu wątek wykonujący funkcje watek3 zakończy się po pięciuset sekundach.

EDIT
Nadmienię tylko, że użycie detach w tym kodzie nie zmienia nic jeśli chodzi o wykonanie. Zawołanie detach oznaczna, że Twój wątek nie jest już powiązany z obiektem typu std::thread, czyli usunięcie tego obiketu z pamięci nie powoduje zamknięcia wątku. W Twoim kodzie nie dochodzi do usunięcia obiektu, więc czy zawołasz detach czy nie, będziesz obserwował to samo zachowanie.

Jeżeli zrezygnowałbyś z detach to takie samo zachowanie jak z dodaniem pauzy zaobserwowałbyś, gdybyś dodał zawołanie watek4.join() przed returnem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1