Kotlin Multiplatform Academy · Oppitunti

Muuttuva tila ja kilpailutilanteet

Suojaa säikeiden välillä jaettua muuttuvaa tilaa.

Oppitunti 3/413 vaihetta

Muuttuva tila ja kilpailutilanteet on ilmainen Kotlin Multiplatform Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Kotlin Multiplatform Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Multiplatform Academy-kurssilla on yhteensä 4 oppituntia.

Jaettu tila on riskialtista

Kun kaksi säiettä käsittelee samaa muuttuvaa tilaa, ajoitus ratkaisee tuloksen. Tämä arvaamattomuus on hienovaraisten virheiden perimmäinen syy.

Mikä kilpailutilanne on

Kilpailutilanne syntyy, kun lopputulos riippuu siitä, mikä säie suoritetaan ensin. Sama koodi voi onnistua kerran ja epäonnistua seuraavalla kerralla.

Tyypillinen päivityksen katoaminen

Kaksi säiettä lukee laskurin, kasvattaa sitä yhdellä, ja toinen kirjoitus ylikirjoittaa toisen. Odotitte kahta kasvua, mutta saitte vain yhden.

count = count + 1

Uusi muistinhallinta ei poista sitä

Uusi muistinhallinta poisti jäädyttämisen, mutta ei kilpailutilanteita. Ilman synkronointia tehdyt kirjoitukset ovat edelleen turvattomia kaikilla alustoilla.

Rajoittakaa tila yhteen säikeeseen

Yksinkertaisin ratkaisu on rajoittaminen: antakaa vain yhden säikeen omistaa muuttuva data. Muut säikeet lähettävät viestejä sen sijaan, että kirjoittaisivat suoraan.

Käyttäkää muuttumattomia tilannekuvia

Suosikaa muuttumattomia arvoja, jotka korvataan kokonaan. Yhden viitteen vaihtaminen on atomista, joten lukijat eivät koskaan näe puolitiehen päivitettyä oliota.

state = state.copy(count = state.count + 1)

Korrutiinit ja Mutex

Jaettuihin kirjoituksiin Mutex päästää kerrallaan sisään yhden korrutiinin. Se keskeyttää muut korrutiinit sen sijaan, että estäisi säikeen.

mutex.withLock { count += 1 }

Atomiset apuvälineet ovat käytettävissä

Yksittäiselle laskurille atominen kääre mahdollistaa turvalliset päivitykset ilman lukkoa. Se käännetään kunkin kohteen natiiveiksi atomisiksi operaatioiksi.

val counter = atomic(0)

Yhden kirjoittajan StateFlow

Kun päivitykset kulkevat yhden StateFlow-virran kautta, vain yksi lähde kirjoittaa tilaa. Monet kerääjät voivat lukea sitä, mutta kirjoitukset pysyvät koordinoituina.

_state.value = _state.value.copy(busy = true)

Testatkaa kuormituksen alla

Kilpailutilanteet pysyvät piilossa kuormituksen ollessa vähäistä. Suorittakaa testeissä jaettua logiikkaa monissa korrutiineissa, jotta ajoitusvirheet löytyvät ennen käyttäjiä.

Suunnitelkaa ongelma pois

Parhaita kilpailutilanteita ovat ne, joita ette koskaan luo. Suosikaa muuttumattomuutta ja yhtä omistajaa, niin useimmat rinnakkaisuusvirheet katoavat itsestään. ✅

Pikatarkistus

Tarkistus turvallisesta jaetusta tilasta.

Kertaus

Osaatte nyt tunnistaa kilpailutilanteet ja korjata ne rajoittamisella, muuttumattomilla tilannekuvilla, Mutexilla tai atomisilla operaatioilla. 🎉

Aloita maksutta

Opi Kotlin 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
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Muuttuva tila ja kilpailutilanteet” ilmainen?

Kyllä – oppitunnin ”Muuttuva tila ja kilpailutilanteet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Kotlin Multiplatform Academy-kurssin, päivitä CoddyKit PROhon. Kotlin Multiplatform Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Muuttuva tila ja kilpailutilanteet”?

Suojaa säikeiden välillä jaettua muuttuvaa tilaa. Harjoittelet Kotlin Multiplatform Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Kotlin Multiplatform Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Multiplatform Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Muuttuva tila ja kilpailutilanteet”-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ä Kotlin Multiplatform Academy-oppitunnilla?

Kyllä. Jokainen Kotlin Multiplatform 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

  1. Uusi muistinhallinta selitettynä
  2. Pääsäie ja taustasäie iOS:ssä
  3. Muuttuva tila ja kilpailutilanteet
  4. Freeze-ongelmien ja säiekaatumisten vianmääritys
← Takaisin: Kotlin Multiplatform Academy