Ohjelmointi

Työskentely langattomien kokoelmien kanssa: ConcurrentStack ja ConcurrentQueue

Langankeräyskokoelmat otettiin ensimmäisen kerran käyttöön .Net 4: ssä ottamalla käyttöön System.Collections.Concurrent nimitila. System.Collections.Concurrent-nimitilassa olevat kokoelmatyypit sisältävät kokoelman langattomien kokoelmien luokkia.

Samanaikainen pino

Pino on tietorakenne, joka toimii LIFO-periaatteella (viimeinen ensin ulos). ConcurrentStack-luokka on langankestävä vastine geneeriselle Stack-luokalle. ConcurrentStack on säiettä käyttävä yleinen keräysluokka, joka otettiin ensimmäisen kerran käyttöön .Net Framework 4: ssä. Tässä on luettelo tämän luokan tärkeistä menetelmistä, jotka kuvaavat mahdollisia toimintoja.

  1. Push (T-elementti) - tätä menetelmää käytetään lisäämään tyypin T tietoja.
  2. PushRange - tällä menetelmällä voidaan lisätä joukko tyypin T kohteita.
  3. TryPop (out T) - tätä menetelmää käytetään ensimmäisen elementin hakemiseen pinosta. Se palaa totta menestyksessä, väärin muuten.
  4. TryPeek (out T) - tätä menetelmää käytetään seuraavan elementin hakemiseen pinosta, mutta se ei poista elementtiä pinosta. Huomaa, että samanlainen kuin TryPop (out T) -menetelmä, se palauttaa arvon tosi onnistumisen yhteydessä ja väärin muuten.
  5. TryPopRange - tämä menetelmä on ylikuormitettu ja toimii samalla tavalla kuin TryPop, mutta sitä käytetään matriisien palauttamiseen pinosta

Näin voit luoda ConcurrentStack-luokan ilmentymän ja siirtää siihen tietoja.

ConcurrentStack concurrentStack = uusi ConcurrentStack ();

for (Int32-indeksi = 0; indeksi <10; indeksi ++)

{

samanaikainenStack.Push (hakemisto);

}

Jos haluat noutaa elementit samanaikaisesta pinosta, voit hyödyntää TryPop (out T) -menetelmää alla olevan kuvan mukaisesti.

Int32-tiedot;

bool-menestys = concurrentStack.TryPop (tiedot pois);

Seuraava koodiluettelo kuvaa, kuinka voit tallentaa ja hakea tietoja samanaikaiseen pinoon ja siitä.

staattinen void Main (merkkijono [] args)

       {

ConcurrentStack concurrentStack = uusi ConcurrentStack ();

for (Int32-indeksi = 0; indeksi <100; indeksi ++)

           {

samanaikainenStack.Push (hakemisto);

           }

while (concurrentStack.Count> 0)

           {

Int32-tiedot;

bool-menestys = concurrentStack.TryPop (tiedot pois);

jos (menestys)

              {

Console.WriteLine (data);

               }

           }

Konsoli.Lue ();

       }

Kun suoritat yllä olevan koodiluettelon, numerot 0-99 näytetään päinvastaisessa järjestyksessä konsoli-ikkunassa.

Samanaikainen jono

Jono on tietorakenne, joka toimii FIFO: n perusteella (first in first out). .Net: n ConcurrentQueue-luokka toimii langattomana FIFO-pohjaisena yleisenä jonona.

Seuraava on luettelo tärkeistä menetelmistä ConcurrentQueue-luokassa.

  1. Enqueue (T-elementti) - tätä menetelmää käytetään lisäämään T-tyypin kohde jonoon
  2. TryPeek (out T) - tätä menetelmää käytetään seuraavan elementin hakemiseen jonosta, mutta se ei poista elementtiä jonosta. Tämä menetelmä palaa tosi menestyksessä ja epätosi, kun se epäonnistuu.
  3. TryDequeue (out T) - tätä menetelmää käytetään ensimmäisen elementin hakemiseen jonosta. Toisin kuin TryPeek (out T) -menetelmä, se poistaa elementin jonosta. Tämä menetelmä palaa tosi menestyksessä ja väärin muuten.

Seuraava koodinpätkä osoittaa, kuinka voit luoda ConcurrentQueue-luokan ilmentymän kokonaislukujen tallentamiseksi.

ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();

Jos haluat tallentaa elementtejä samanaikaiseen jonoilmentymään, voit hyödyntää Enqueue-menetelmää alla olevan kuvan mukaisesti.

concurrentQueue.Enqueue (100);

Seuraava koodiluettelo kuvaa, kuinka voit tallentaa ja noutaa elementtejä samanaikaiseen jonoon ja siitä.

ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();

for (int-indeksi = 0; indeksi <100; indeksi ++)

{

concurrentQueue.Enqueue (hakemisto);

}

Int32-tuote;

while (concurrentQueue.TryDequeue (out-kohde))

{

Console.WriteLine (kohde);

}

Kun suoritat yllä olevan koodiluettelon, numerot 0-99 näkyvät konsoli-ikkunassa.

Huomaa, että sekä ConcurrentStack- että ConcurrentQueue-luokat ovat langattomia ja voivat hallita lukitus- ja synkronointiongelmia sisäisesti.

Voit myös muuntaa samanaikaisen jonoilmentymän taulukoksi soittamalla ToArray () -menetelmään. Seuraava koodinpätkä kuvaa, miten tämä voidaan saavuttaa.

ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();

for (Int32-indeksi = 0; indeksi <100; indeksi ++)

concurrentQueue.Enqueue (hakemisto);

Int32 [] integerArray = concurrentQueue.ToArray ();

foreach (int i in kokonaisluku Array)

{

Console.WriteLine (i);

}

ConcurrentQueue-luokan IsEmpty-ominaisuus palauttaa arvon true, koska kokoelma on tyhjä, muuten epätosi. Seuraava koodinpätkä osoittaa, kuinka voit käyttää tätä menetelmää.

ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();

for (Int32-indeksi = 0; indeksi <100; indeksi ++)

concurrentQueue.Enqueue (hakemisto);

while (! concurrentQueue.IsEmpty)

{

Int32 tulos;

concurrentQueue.TryDequeue (tulos loppu);

Console.WriteLine (tulos);

}

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