Esileht > Alustus > Parallel.For Break ja Stop

Parallel.For Break ja Stop


Teises artiklis vaatasime, kuidas kasutada Parallel.For() meetodit. Kuidas silmusest välja pääseda? Jadaprogrammis teeksime nii:

for (int i = 0, i < 20, i++)
{
Console.WriteLine(i);
if (i == 10)
break;
};

Rööplemises võib selle jaoks võib võtta objekti tüübiga ParallelLoopState, mis pakub meetodeid Break() ja Stop().

Break() lõpetab kõik lõimed, kuid garanteerib, et lõpetamise ajaks on iga lõim jõudnud sama väärtuseni, mis oli lõimel, mis kutsus välja katkestuse.

Parallel.For(0, 20, (i, state) =>
{
Console.WriteLine(i);
if (i == 10)
state.Break();
}

Minu katsetuse puhul tähendas see, et väljastati arvud 0, 2, 3, 4, 6, 7, 9, 5, 1, 15, 16, 17, 18, 19, 10, 12, 14, 8. Nagu näed, 11 ja 13 on puudu, sest need lõimed olid juba surnud, aga 0 kuni 10 on kindlalt olemas.

Vastupidiselt sellele katkestab Stop() silmuse töö, sõltumata sellest, millisele tasemele teised lõimed on jõudnud. Seega, kui Stop() juhtub lõimes, mis on teistest parasjagu ees, võivad mõned väärtused vahemikust 0 kuni 10 isegi puudu jääda.

Break() ega Stop() ei garanteeri, et ei käivitada rohkem tsükleid kui vaja, ja see on täiesti loomulik, sest kõik lõimed hakkavad kohe täisvõimsusel hagu andma.

Eeltoodud näidet võiks kiirema pidamasaamise huvides muuta siis nii:

if (i >= 10)
state.Stop();

Kui jadaprogrammis on garanteeritud, et i ==10 ja seejärel i ==11, siis rööpes võib vabalt juhtuda, et esiteks i > 10 ja alles seejärel i==10.

Advertisements
Rubriigid:Alustus Sildid:, , ,
  1. Kommentaare veel pole.
  1. No trackbacks yet.

Lisa kommentaar

Kommenteerimiseks palun logi sisse, kasutades üht neist võimalustest:

WordPress.com Logo

Sa kommenteerid kasutades oma WordPress.com kontot. Logi välja / Muuda )

Twitter picture

Sa kommenteerid kasutades oma Twitter kontot. Logi välja / Muuda )

Facebook photo

Sa kommenteerid kasutades oma Facebook kontot. Logi välja / Muuda )

Google+ photo

Sa kommenteerid kasutades oma Google+ kontot. Logi välja / Muuda )

Connecting to %s

%d bloggers like this: