Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 193519|Atsakyti: 11

[Šaltinis] .net/c# Vartotojo kelių gijų sutapimo užraktas (eilutė){...} Išsamus paaiškinimas

[Kopijuoti nuorodą]
Paskelbta 2019-07-03 15:25:19 | | | |
Dažni piktnaudžiavimo scenarijai: Siekdami išvengti pasikartojančių užsakymų apmokėjimo, kurį sukelia vartotojai netyčia kelis kartus spustelėję mokėjimo mygtuką, naudojame užraktą (užsakymo numerį), kad užtikrintume, jog tik viena gija gali atlikti operaciją su užsakymu.

Ši idėja yra gera, bent jau geresnė už užraktą (privatų statinį objektą klasėms apdoroti), nes užrakinus užsakymo numerį užrakinama tik dabartinio 1 pavedimo operacija, o jei užrakto statinis kintamasis, t. y. užrakinamas visi užsakymai, visi pavedimai bus įtraukti į eilę, o tai akivaizdžiai neprotinga.

Taigi, ar šio straipsnio pradžioje paminėtas užrakto (užsakymo numerio) metodas gali pasiekti norimą efektą? Pirmiausia panaudokime kodą, kad atkurtume naudojimo scenarijų.

Jei nepaisysite vartotojo informacijos ir kitų patvirtinimų, kodas atrodys maždaug taip:
Raktiniam žodžiui "lock" MSDN apima informaciją, kurią galima rasti "Baidu", ir atrodo, kad rekomenduojama nenaudoti užrakto (eilutės), o priežastis ta pati. Ši ištrauka yra paimta iš MSDN patarimų dėl užrakto stygų:

Užrakto ("myLock") problema kyla, nes bet kuris kitas kodas, naudojantis tą pačią eilutę, turės tą patį užraktą.
Šis sakinys slepia didžiulį mechanizmą, tai yra "tą pačią stygą".

Kas yra "ta pati eilutė"? Žiūrėti kodą:


Ar str1 ir str2 yra ta pati eilutė aukščiau? Atsakymas yra TAIP.

Žiūrėkite dar kartą:


Ar str1 ir str2 aukščiau vis dar ta pati eilutė? Atsakymas yra NE.

Gerai, grįžkime prie užsakymo apmokėjimo klausimo. Mūsų kode, lock(orderNumber), kai vartotojas netyčia spustelėja dar kelis kartus po braukimo ranka, ar orderNumber įvedant šį veiksmą kiekvieną kartą ta pati eilutė? Atsakymas yra NE. Tai reiškia, kad

Kodas, kuris tvarko aukščiau pateiktą užsakymą, iš tikrųjų neveikia kaip užraktas.

Tiesą sakant, yra dviejų tipų eilučių palyginimai, žiūrėkite kodą:


Pirmoji aukščiau pateikto kodo eilutė išveda True, o antroji eilutė išveda False. Manau, kad suprantate, ką MSDN reiškia "ta pati eilutė" be mano paaiškinimo.

Geriausias sprendimas

Optimalių fiksavimo stygų sprendimai:





Demonstracinis kodas:




Svetainėje kartais gali būti naudojamas visuotinis kintamasis, šis visuotinis kintamasis, kai keli vartotojai pasiekia vienu metu, gali atrodyti nenormalus, šiuo metu nustatysime visuotinį užraktą, tačiau trūkumas yra tas, kad visos prieigos lauks paeiliui.

Kai kuriais atvejais, pavyzdžiui, tas pats vartotojas gali komentuoti tik vieną kartą per 15 sekundžių, jei naudojamas visuotinis užraktas, komentaro funkcija bus apdorojama labai lėtai, kai padidės vartotojų skaičius, o tai labai paveiks vartotojo patirtį.

Šiuo metuGalime nustatyti užraktą kiekvienam vartotojui atskirai, lock(string){...}, o užrakto pavadinimą galima apibrėžti taip:Metodo pavadinimas + vartotojo IDTokiu būdu kiekvienas vartotojas turi nepriklausomą užraktą, o vertinant komentarų intervalą, tai neturės įtakos kitų vartotojų komentarams.

(Pabaiga)




Ankstesnis:MFC LPSTR tipo rašymas
Kitą:OpenSSL akivaizdžiai buvo atnaujinta, Apache vis dar ragina seną versiją?
Paskelbta 2022-05-13 14:27:17 |
Taigi, ar šio straipsnio pradžioje paminėtas užrakto (užsakymo numerio) metodas gali pasiekti norimą efektą? Pirmiausia panaudokime kodą, kad atkurtume naudojimo scenarijų.
 Savininkas| Paskelbta 2023-08-12 19:48:15 |
.NET/C# užrakto principo monitorius pateikia išsamų paaiškinimą
https://www.itsvse.com/thread-9633-1-1.html
Paskelbta 2023-01-07 11:22:02 |
Aš taip pat susidūriau su juo savo darbo praktikoje, ačiū autoriui už šį techninį straipsnį
Paskelbta 2019-07-03 20:02:32 |
Tai geras dalykas
Paskelbta 2021-06-18 14:24:43 |
Puslapyje rodoma, kad kodo negalima peržiūrėti
Paskelbta 2021-06-29 00:21:16 |
Pažvelkite į kodą
Paskelbta 2021-06-29 00:54:24 |
Nematau kodo
Paskelbta 2022-05-14 10:06:46 |
Išmokite mokytis
Paskelbta 2022-05-28 22:03:59 |
Labai geras, išmoktas
Paskelbta 2022-11-28 21:46:47 |
Ar galima asp.net naudoti?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com