std::thread: liittyminen ja irrottaminen
Käynnistä säikeitä std::threadillä ja valitse join- ja detach-toimintojen välillä.
std::thread: liittyminen ja irrottaminen on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
std::thread-luokka
<thread>-otsake toi säikeistyksen standardikirjastoon C++11:ssä. Jokainen std::thread-ilmentymä edustaa yhtä käyttöjärjestelmän säiettä.
Säikeen käynnistäminen
Välittäkää konstruktorille kutsuttava olio, kuten funktio, lambda tai funktoriobjekti. Säie aloittaa suorituksen välittömästi.
#include <thread>
#include <iostream>
void worker() { std::cout << "running on thread\n"; }
int main() {
std::thread t(worker);
t.join(); // wait for it to finish
}Argumenttien välittäminen
Välittäkää argumentit kutsuttavalle oliolle konstruktorin kautta.
std::thread t([](int n) { std::cout << n; }, 42);
t.join();Välittäminen viitteenä
Käyttäkää std::ref-funktiota argumenttien välittämiseen viitteinä. Ilman sitä säie saa argumenteista kopiot.
int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter; // 1join(): suorituksen valmistumisen odottaminen
Kutsukaa join()-funktiota, jotta kutsuva säie odottaa kohdesäikeen valmistumista. Join-kutsun jälkeen säiettä ei voi enää yhdistää.
detach(): suorittaminen itsenäisesti
Kutsukaa detach()-funktiota, jotta säie suoritetaan itsenäisesti. Se jatkaa suoritustaan std::thread-olion tuhoutumisen jälkeen. Käyttöjärjestelmä vapauttaa resurssit säikeen päättyessä.
std::thread t([]() { /* background work */ });
t.detach(); // we no longer track itjoinable()
Tarkistakaa, voidaanko säie yhdistää tai irrottaa. Yhdistettyä tai irrotettua säiettä ei voi enää yhdistää.
Join-kutsun unohtaminen: ohjelman päättyminen
Jos std::thread-olio tuhotaan sen ollessa yhä yhdistettävissä, ohjelma kutsuu std::terminate-funktiota. Kutsukaa aina join()- tai detach()-funktiota ennen tuhoamista.
RAII-kääre
Kirjoittakaa pieni RAII-kääre, joka yhdistää säikeen destruktorissaan. Voitte myös käyttää std::jthread-luokkaa (C++20), joka yhdistää säikeen automaattisesti.
#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyedLaitteiston samanaikaisuus
Selvittäkää laitteiston säikeiden määrä kutsulla std::thread::hardware_concurrency(). Käyttäkää sitä säiepoolien koon määrittämiseen.
Säietunnukset
Jokaisella säikeellä on yksilöllinen tunnus. Hakekaa nykyisen säikeen tunnus kutsulla std::this_thread::get_id().
Säikeen nukuttaminen
Käyttäkää std::this_thread::sleep_for(duration)-funktiota nykyisen säikeen keskeyttämiseen.
#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);Pikatarkistus
Mitä tapahtuu, jos yhdistettävissä oleva std::thread-olio tuhotaan ennen kuin join()- tai detach()-funktiota kutsutaan?
Kertaus
Käynnistäkää säikeet std::thread-olion ja kutsuttavan olion avulla. Kutsukaa aina join()- tai detach()-funktiota ennen säieolion tuhoamista — tai käyttäkää C++20:n std::jthread-luokkaa, joka yhdistää säikeen automaattisesti.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”std::thread: liittyminen ja irrottaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “std::thread: liittyminen ja irrottaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”std::thread: liittyminen ja irrottaminen”?
Käynnistä säikeitä std::threadillä ja valitse join- ja detach-toimintojen välillä. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”std::thread: liittyminen ja irrottaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- std::thread: liittyminen ja irrottaminen
- std::mutex, lock_guard ja unique_lock
- Ehtomuuttujat ja työntekijämallit
- std::async- ja std::future-perusteet