Programiranje

Delo z zbirkami, varnimi za nit: ConcurrentStack in ConcurrentQueue

Varne zbirke niti so bile prvič predstavljene v .Net 4 z uvedbo imenskega prostora System.Collections.Concurrent. Vrste zbirk v imenskem prostoru System.Collections.Concurrent vsebujejo zbirko razredov zbirk varnih niti.

ConcurrentStack

Sklop je podatkovna struktura, ki deluje na osnovi LIFO (zadnji v prvem izhodu). Razred ConcurrentStack je nitno varen dvojnik generičnega razreda Stack. ConcurrentStack je generični razred zbiranja, ki je varen za nit in je bil prvič predstavljen kot del .Net Framework 4. Tu je seznam pomembnih metod tega razreda, ki ponazarjajo možne operacije.

  1. Potisni (element T) - ta metoda se uporablja za dodajanje podatkov tipa T.
  2. PushRange - s to metodo lahko dodate vrsto elementov tipa T.
  3. TryPop (out T) - ta metoda se uporablja za pridobivanje prvega elementa iz sklada. Ob uspehu se vrne, sicer drugače.
  4. TryPeek (out T) - ta metoda se uporablja za pridobivanje naslednjega elementa iz sklada, vendar ne odstrani elementa iz sklada. Upoštevajte, da podobno kot metoda TryPop (out T) vrne true ob uspehu in false drugače.
  5. TryPopRange - ta metoda je preobremenjena in deluje podobno kot TryPop, vendar se uporablja za pridobivanje nizov iz sklada

Tukaj je opisano, kako lahko ustvarite primerek razreda ConcurrentStack in vanj potisnete podatke.

ConcurrentStack concurrentStack = nov ConcurrentStack ();

za (indeks Int32 = 0; indeks <10; indeks ++)

{

concurrentStack.Push (indeks);

}

Če želite elemente pridobiti iz sočasnega sklada, lahko uporabite metodo TryPop (out T), kot je prikazano spodaj.

Podatki Int32;

uspeh bool = concurrentStack.TryPop (out out data);

Naslednji seznam kod ponazarja, kako lahko shranjujete in pridobivate podatke v in iz sočasnega sklada.

statična praznina Main (string [] args)

       {

ConcurrentStack concurrentStack = nov ConcurrentStack ();

za (indeks Int32 = 0; indeks <100; indeks ++)

           {

concurrentStack.Push (indeks);

           }

medtem ko (concurrentStack.Count> 0)

           {

Podatki Int32;

uspeh bool = concurrentStack.TryPop (out out data);

če (uspeh)

              {

Console.WriteLine (podatki);

               }

           }

Console.Read ();

       }

Ko izvedete zgornji seznam kod, bodo številke od 0 do 99 prikazane v obratnem vrstnem redu v oknu konzole.

ConcurrentQueue

Čakalna vrsta je podatkovna struktura, ki deluje na osnovi FIFO (prvi v prvem izhodu). Razred ConcurrentQueue v .Net deluje kot nitna generična čakalna vrsta, ki temelji na FIFO.

Sledi seznam pomembnih metod v razredu ConcurrentQueue.

  1. Enqueue (element T) - ta metoda se uporablja za dodajanje elementa tipa T v čakalno vrsto
  2. TryPeek (out T) - ta metoda se uporablja za pridobivanje naslednjega elementa iz čakalne vrste, vendar ne odstrani elementa iz čakalne vrste. Ta metoda vrne true ob uspehu in false, če ne uspe.
  3. TryDequeue (out T) - ta metoda se uporablja za pridobivanje prvega elementa iz čakalne vrste. V nasprotju z metodo TryPeek (out T) element odstrani iz čakalne vrste. Ta metoda vrne true ob uspehu in false drugače.

Naslednji delček kode prikazuje, kako lahko ustvarite primerek razreda ConcurrentQueue za shranjevanje celih števil.

ConcurrentQueue concurrentQueue = novo ConcurrentQueue ();

Če želite elemente shraniti v sočasni primerek čakalne vrste, lahko izkoristite metodo Enqueue, kot je prikazano spodaj.

concurrentQueue.Enqueue (100);

Naslednji seznam kod ponazarja, kako lahko shranjujete in pridobivate elemente v sočasno čakalno vrsto in iz nje.

ConcurrentQueue concurrentQueue = novo ConcurrentQueue ();

za (int indeks = 0; indeks <100; indeks ++)

{

concurrentQueue.Enqueue (indeks);

}

Postavka Int32;

while (concurrentQueue.TryDequeue (zunanji element))

{

Console.WriteLine (element);

}

Ko izvedete zgornji seznam kod, se v oknu konzole prikažejo številke od 0 do 99.

Upoštevajte, da sta razreda ConcurrentStack in ConcurrentQueue varna pred nitmi in lahko interno upravljata težave z zaklepanjem in sinhronizacijo.

Primerek sočasne čakalne vrste lahko pretvorite tudi v matriko, tako da pokličete metodo ToArray (). Naslednji delček kode prikazuje, kako je to mogoče doseči.

ConcurrentQueue concurrentQueue = novo ConcurrentQueue ();

za (indeks Int32 = 0; indeks <100; indeks ++)

concurrentQueue.Enqueue (indeks);

Int32 [] integerArray = concurrentQueue.ToArray ();

foreach (int i v integerArray)

{

Console.WriteLine (i);

}

Lastnost IsEmpty razreda ConcurrentQueue vrne true, če je zbirka prazna, sicer pa false. Naslednji delček kode prikazuje, kako lahko uporabite to metodo.

ConcurrentQueue concurrentQueue = novo ConcurrentQueue ();

za (indeks Int32 = 0; indeks <100; indeks ++)

concurrentQueue.Enqueue (indeks);

while (! concurrentQueue.IsEmpty)

{

Rezultat Int32;

concurrentQueue.TryDequeue (izhodni rezultat);

Console.WriteLine (rezultat);

}

$config[zx-auto] not found$config[zx-overlay] not found