Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 193519|Atbildi: 11

[Avots] .net/c# Lietotāja daudzpavedienu vienlaicīga bloķēšana (virkne){...} Detalizēts skaidrojums

[Kopēt saiti]
Publicēts 03.07.2019 15:25:19 | | | |
Bieži sastopami ļaunprātīgas izmantošanas scenāriji: Lai novērstu pasūtījumu dublēšanos, ko izraisa lietotāji nejauši noklikšķinot uz maksājuma pogas vairākas reizes, mēs izmantojam bloķēšanu (pasūtījuma numuru), lai nodrošinātu, ka tikai viens pavediens ir atļauts veikt darbību ar pasūtījumu.

Šī ideja ir laba, vismaz labāka par bloķēšanu (privāts statisks objekts apstrādes klasēm), jo bloķēšanas pasūtījuma numura efekts ir bloķēt tikai pašreizējā 1 pasūtījuma darbību, un, ja bloķēšanas statiskais mainīgais, tas ir, bloķēt visus pasūtījumus, izraisīs visu pasūtījumu rindu, kas ir acīmredzami nepamatoti.

Tātad, vai šī raksta sākumā minētā bloķēšanas (pasūtījuma numura) metode var sasniegt vēlamo efektu? Vispirms izmantosim kodu, lai atjaunotu lietošanas scenāriju.

Ja ignorējat lietotāja informāciju un citas validācijas, kods izskatās gandrīz šādi:
Bloķēšanas atslēgvārdam MSDN ietver informāciju, ko var atrast Baidu, un šķiet, ka nav ieteicams izmantot lock(string), un iemesls ir tāds pats. Šis fragments ir ņemts no MSDN ieteikumiem par bloķēšanas virknēm:

Bloķēšanas ("myLock") problēma rodas, jo jebkurš cits kods, kas procesā izmanto to pašu virkni, koplieto to pašu slēdzeni.
Šis teikums slēpj milzīgu mehānismu, tas ir, "to pašu virkni".

Kas ir "viena un tā pati virkne"? Skatīt kodu:


Vai str1 un str2 ir viena un tā pati virkne iepriekš? Atbilde ir JĀ.

Skatīt vēlreiz:


Vai str1 un str2 iepriekš joprojām ir viena un tā pati virkne? Atbilde ir NĒ.

Labi, atgriezīsimies pie jautājuma par mūsu pasūtījuma apmaksu. Mūsu kodā lock(orderNumber), kad lietotājs nejauši noklikšķina vēl dažas reizes pēc rokas pavilkšanas, vai pasūtījuma numurs, kas ievada šo darbību, katru reizi ir viena un tā pati virkne? Atbilde ir NĒ. Tas nozīmē, ka

Kods, kas apstrādā iepriekš minēto pasūtījumu, faktiski nedarbojas kā slēdzene.

Faktiski ir divu veidu virkņu salīdzinājumi, skatiet kodu:


Iepriekš minētā koda pirmā rinda izvada True, bet otrā rinda izvada False. Es domāju, ka jūs saprotat, ko MSDN nozīmē ar "to pašu virkni" bez mana paskaidrojuma.

Labākais risinājums

Risinājumi optimālām bloķēšanas auklām:





Demo kods:




Tīmekļa vietnē dažreiz var tikt izmantots globāls mainīgais, šis globālais mainīgais, kad vairāki lietotāji vienlaikus piekļūst, var šķist nenormāls, šobrīd mēs iestatīsim globālo bloķēšanu, bet trūkums ir tas, ka visas piekļuves gaidīs pēc kārtas.

Dažos scenārijos, piemēram, viens un tas pats lietotājs var komentēt tikai vienu reizi 15 sekunžu laikā, ja tiek izmantota globālā bloķēšana, komentāru funkcija būs ļoti lēna, kad lietotāju skaits palielināsies, kas ievērojami ietekmēs lietotāja pieredzi.

ŠobrīdMēs varam iestatīt bloķēšanu katram lietotājam atsevišķi, lock(string){...}, un slēdzenes nosaukumu var definēt kā:Metodes nosaukums + lietotāja IDTādā veidā katram lietotājam ir neatkarīga bloķēšana, un, spriežot par komentāru intervālu, tas neietekmēs citu lietotāju komentārus.

(Beigas)




Iepriekšējo:MFC LPSTR tipa rakstīšana
Nākamo:OpenSSL acīmredzami ir atjaunināts, Apache joprojām pieprasa veco versiju?
Publicēts 13.05.2022 14:27:17 |
Tātad, vai šī raksta sākumā minētā bloķēšanas (pasūtījuma numura) metode var sasniegt vēlamo efektu? Vispirms izmantosim kodu, lai atjaunotu lietošanas scenāriju.
 Saimnieks| Publicēts 12.08.2023 19:48:15 |
.NET/C# bloķēšanas principa pārraugs sniedz padziļinātu skaidrojumu
https://www.itsvse.com/thread-9633-1-1.html
Publicēts 07.01.2023 11:22:02 |
Es to saskāros arī savā darba praksē, pateicoties autoram par šo tehnisko rakstu
Publicēts 03.07.2019 20:02:32 |
Tas ir labs materiāls
Publicēts 18.06.2021 14:24:43 |
Lapā tiek parādīts, ka kodu nevar apskatīt
Publicēts 29.06.2021 00:21:16 |
Apskatiet kodu
Publicēts 29.06.2021 00:54:24 |
Es neredzu kodu
Publicēts 14.05.2022 10:06:46 |
Iemācieties mācīties
Publicēts 28.05.2022 22:03:59 |
Ļoti labi, iemācījušies
Publicēts 28.11.2022 21:46:47 |
Vai asp.net var izmantot?
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com