Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 193519|Vastaus: 11

[Lähde] .net/c# Käyttäjä monisäikeinen rinnakkaisluku (merkkijono){...} Yksityiskohtainen selitys

[Kopioi linkki]
Julkaistu 3.7.2019 15.25.19 | | | |
Yleisiä väärinkäytön tilanteita: Estääksemme tilausten päällekkäiset maksut, jotka johtuvat käyttäjien vahingossa painamasta maksupainiketta useaan kertaan, käytämme lukkoa (tilausnumero) varmistaaksemme, että vain yksi säie saa suorittaa tilauksen toiminnon.

Tämä idea on hyvä, ainakin parempi kuin lock (yksityinen staattinen objekti luokkien käsittelyyn), koska lukumääränumeron lukitsemisen vaikutus on lukita vain nykyisen yhden järjestyksen operaation, ja jos lukitsee staattisen muuttujan, eli lukita kaikki tilaukset, kaikki tilaukset jonotetaan, mikä on ilmiselvästi kohtuutonta.

Voiko artikkelin alussa mainittu lukitusmenetelmä (tilausnumero) saavuttaa halutun tuloksen? Käytetään ensin koodia käyttötilanteen palauttamiseen.

Jos jätät käyttäjätiedot ja muut validointitiedot huomiotta, koodi näyttää käytännössä tältä:
Lukon avainsanasta MSDN sisältää tietoa, joka löytyy Baidusta, ja näyttää siltä, että lock(string)-sanaa ei suositella, ja syy on sama. Seuraava kohta on otettu MSDN:n neuvosta lukkokielistä:

Lock("myLock") -ongelma johtuu siitä, että mikä tahansa muu koodi, joka käyttää samaa merkkijonoa prosessissa, jakaa saman lukon.
Tämä lause kätkee suuren mekanismin, nimittäin "saman merkkijonon".

Mitä tarkoittaa "sama lanka"? Katso koodi:


Ovatko str1 ja str2 sama kieli yllä mainittuna? Vastaus on KYLLÄ.

Katso uudelleen:


Ovatko str1 ja str2 yläpuolella edelleen sama kieli? Vastaus on EI.

Okei, palataan tilausmaksun asiaan. Koodissamme lock(orderNumber), kun käyttäjä vahingossa klikkaa muutaman kerran pyyhkäistyään kättään, onko orderNumber joka kerta sama merkkijono, kun hän syöttää tämän toiminnon? Vastaus on EI. Tämä tarkoittaa

Koodi, joka käsittelee yllä olevan järjestyksen, ei oikeasti toimi lukkona.

Itse asiassa on olemassa kahta tyyppiä merkkijonojen vertailuja, katso koodi:


Yllä olevan koodin ensimmäinen rivi tuottaa True-arvon ja toinen rivi False-arvon. Uskon, että ymmärrät, mitä MSDN tarkoittaa "samalla langalla" ilman selitystäni.

Paras ratkaisu

Ratkaisuja optimaalisiin lukittuviin kieliin:





Demokoodi:




Verkkosivustolla joskus voidaan käyttää globaalia muuttujaa, ja tämä globaali muuttuja, kun useampi käyttäjä käyttää niitä samanaikaisesti, voi vaikuttaa epänormaalilta, jolloin asetamme globaalin lukon, mutta haittapuolena on, että kaikki pääsyt odottavat vuorollaan.

Joissain tapauksissa, esimerkiksi sama käyttäjä voi kommentoida vain kerran 15 sekunnin sisällä, ja jos globaalia lukitusta käytetään, kommentointitoiminto käsittelee hyvin hitaasti, kun käyttäjämäärä kasvaa, mikä vaikuttaa merkittävästi käyttäjäkokemukseen.

Tällä hetkellä,Voimme asettaa lukon jokaiselle käyttäjälle erikseen, lock(string){...}, ja lukon nimi voidaan määritellä seuraavasti:Metodin nimi + käyttäjän IDNäin jokaisella käyttäjällä on itsenäinen lukitus, ja kommenttiväliä arvioitaessa se ei vaikuta muiden käyttäjien kommentteihin.

(Loppu)




Edellinen:MFC:n LPSTR-tyyppikirjoitus
Seuraava:OpenSSL on selvästi päivitetty, APACHE pyytää edelleen vanhaa versiota?
Julkaistu 13.5.2022 14.27.17 |
Voiko artikkelin alussa mainittu lukitusmenetelmä (tilausnumero) saavuttaa halutun tuloksen? Käytetään ensin koodia käyttötilanteen palauttamiseen.
 Vuokraisäntä| Julkaistu 12.8.2023 19.48.15 |
.NET/C# Lock Principle Monitor tarjoaa perusteellisen selityksen
https://www.itsvse.com/thread-9633-1-1.html
Julkaistu 7.1.2023 11.22.02 |
Törmäsin siihen myös työharjoittelussani, kiitos tekijälle tästä teknisestä artikkelista
Julkaistu 3.7.2019 20.02.32 |
Tämä on hyvää tavaraa
Julkaistu 18.6.2021 14.24.43 |
Sivulla näkyy, että koodia ei voi tarkastella
Julkaistu 29.6.2021 0.21.16 |
Katso koodia
Julkaistu 29.6.2021 0.54.24 |
En näe koodia
Julkaistu 14.5.2022 10.06.46 |
Opettele oppimaan
Julkaistu 28.5.2022 22.03.59 |
Erittäin hyvä, oppinut
Julkaistu 28.11.2022 21.46.47 |
Voiko asp.net käyttää?
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com