Objektovo orientované programovanie v C# poskytuje veľa používateľsky prívetivých operačných tried, tento StringDictionary je kolekcia tried špecializujúcich sa na ukladanie reťazcov ako kľúčov a hodnôt, význam tejto triedy je: C# vie, že reťazec v danom type hodnoty je pomerne široko používaný, iné typy hodnôt sa dajú tiež konvertovať na zodpovedajúce typy reťazcov, to je význam tejto kolekcie, ale stále môžete použiť iné objekty kolekcie na jej nahradenie, ale venujte pozornosť jednému bodu, Ak ide o úložisko reťazcov, môže to znížiť stratu pamäte a skrátiť čas potrebný na spustenie programu
SyncRoot sa dá použiť na synchronizáciu prístupu k StringDictionary
Aby som to povedal na rovinu, je to koncept zámku, poďme napísať program na jeho testovanie:
Kód je nasledovný:
Máme dve vlákna súčasne na pridávanie dát do slovníka StringDictionary,
Rozdiel v čase vykonávania medzi prvým a druhým vláknom je jedna sekunda, aby sa časový rozdiel zväčšil a zabránilo sa príliš rýchlemu vykonávaniu.
Vidíte, že vlákna prešli na tieto dve metódy a pri pridávaní druhého dáta čakali na pridanie prvých dát pred pridaním druhého dáta, pričom čas pridania je veľmi rýchly.
Nižšie ho napíšeme inak, aby bol ľahšie pochopiteľný:
Otvoria sa 3 vlákna, pridajú sa dáta a všetky 3 vlákna sa spustia takmer súčasne, ale keď sa pridajú dáta, každé je od seba vzdialené 10 sekúnd.
Na záver, pri viacvláknovom prístupe môžeme použiť SyncRoot na zabezpečenie bezpečnosti vlákien
|