See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 193519|Vastuse: 11

[Allikas] .net/c# Kasutaja mitmelõimeline samaaegsus lock(string){...} Üksikasjalik selgitus

[Kopeeri link]
Postitatud 03.07.2019 15:25:19 | | | |
Levinud väärkasutuse stsenaariumid: Selleks, et vältida tellimuste dubleerimist, mis tekib kasutajate kogemata maksenupule mitu korda vajutamisel, kasutame lukustust (tellimuse number), et tagada, et ainult üks lõim saab tellimuse toimingu läbi viia.

See idee on hea, vähemalt parem kui lukustus (privaatne staatiline objekt klasside töötlemiseks), sest lukustamise mõju on lukustada ainult praeguse 1 järgu operatsioon, ja kui lukustada staatiline muutuja, st lukustada kõik järjekorrad, paneb kõik järjekorrad järjekorda, mis on ilmselgelt ebamõistlik.

Kas selle artikli alguses mainitud lukustusmeetod (tellimuse number) suudab saavutada soovitud tulemuse? Kasutame esmalt koodi, et taastada kasutusstsenaarium.

Kui ignoreerida kasutajainfot ja muid valideerimisi, näeb kood välja umbes selline:
Luku võtmesõna puhul sisaldab MSDN teavet, mida võib leida Baidu platvormil, ning tundub, et lock(string) ei tohiks kasutada ning põhjus on sama. Järgmine lõik on võetud MSDN-i nõuannetest lukukeelte kohta:

Lock("myLock") probleem tekib, kuna iga teine kood, mis kasutab protsessis sama stringi, jagab sama lukku.
See lause peidab tohutut mehhanismi, nimelt "sama stringi".

Mis on "sama niit"? Vaata koodi:


Kas str1 ja str2 on sama keel ülal? Vastus on JAH.

Vaata uuesti:


Kas str1 ja str2 on ikka sama keel? Vastus on EI.

Olgu, lähme tagasi tellimuse makse teema juurde. Meie koodis lock(orderNumber), kui kasutaja kogemata klõpsab paar korda veel paar korda pärast käe pühkimist, kas orderNumber sisestab selle toimingu iga kord sama string? Vastus on EI. See tähendab, et

Kood, mis käsitleb ülaltoodud järjekorda, ei toimi tegelikult lukustusena.

Tegelikult on kahte tüüpi stringide võrdlusi, vt koodi:


Ülaltoodud koodi esimene rida annab väljundiks True ja teine rida False. Usun, et sa mõistad, mida MSDN mõtleb "sama nöör" all ilma minu selgituseta.

Parim lahendus

Lahendused optimaalseteks lukustuskeelteks:





Demokood:




Veebilehel võib mõnikord kasutada globaalset muutujat, mis võib tunduda ebanormaalne, kui mitu kasutajat korraga ligi pääsevad, kuid sel ajal seatakse globaalne lukustus, kuid selle puuduseks on see, et kõik ligipääsud ootavad kordamööda.

Näiteks mõnes olukorras saab sama kasutaja kommenteerida vaid korra 15 sekundi jooksul, kui kasutatakse globaalset lukustust, on kommentaarifunktsioon väga aeglane, kui kasutajate arv suureneb, mis mõjutab kasutajakogemust oluliselt.

Sel ajal,Luku saab määrata iga kasutaja jaoks eraldi, lock(string){...}, ja luku nime saab defineerida järgmiselt:Meetodi nimi + kasutaja IDNii on igal kasutajal sõltumatu lukustus ning kommentaaride intervalli hindamisel ei mõjuta see teiste kasutajate kommentaare.

(Lõpp)




Eelmine:MFC LPSTR-tüüpi kirjutamine
Järgmine:OpenSSL on ilmselgelt uuendatud, APACHE kutsub ikka vana versiooni?
Postitatud 13.05.2022 14:27:17 |
Kas selle artikli alguses mainitud lukustusmeetod (tellimuse number) suudab saavutada soovitud tulemuse? Kasutame esmalt koodi, et taastada kasutusstsenaarium.
 Üürileandja| Postitatud 12.08.2023 19:48:15 |
.NET/C# luku põhimõtte monitor annab põhjaliku selgituse
https://www.itsvse.com/thread-9633-1-1.html
Postitatud 07.01.2023 11:22:02 |
Kogesin seda ka oma tööpraktikas, tänu autorile selle tehnilise artikli eest
Postitatud 03.07.2019 20:02:32 |
See on hea kraam.
Postitatud 18.06.2021 14:24:43 |
Lehel on näha, et koodi ei saa vaadata
Postitatud 29.06.2021 00:21:16 |
Vaata koodi
Postitatud 29.06.2021 00:54:24 |
Ma ei näe koodi
Postitatud 14.05.2022 10:06:46 |
Õpi õppima
Postitatud 28.05.2022 22:03:59 |
Väga hea, õppisin
Postitatud 28.11.2022 21:46:47 |
Kas asp.net saab kasutada?
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com