Научно-образовательный IT-форум при КНИТУ-КАИ

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Научно-образовательный IT-форум при КНИТУ-КАИ » Задачи и вопросы » [+] Многопоточная работа с Dictionary на C#


[+] Многопоточная работа с Dictionary на C#

Сообщений 1 страница 2 из 2

1

Требуется модифицировать программу таким образом, чтобы обеспечить работу с Dictionary параллельно. Для решения предлагается использовать классы Parallel и ConcurrentDictionary.

Код:
using System;
using System.Collections.Generic;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var cd = new Dictionary<char, int>();
            for(int i = 0; i < 26; i++)
            {
                char key = (char)((int)'a'+i);
                cd.Add(key, i);
            }
            Console.WriteLine("Содержание словаря после добавлений:");
            foreach (var dic in cd)
                Console.WriteLine("Key = {0}, Value = {1}", dic.Key, dic.Value);
            Console.WriteLine();
            for(int i = 0; i < 26; i++)
            {
                char key = (char)((int)'a'+i);
                int val;
                cd.TryGetValue(key, out val);
                cd.Remove(key);
                cd.Add(key, val*val);
            }
            Console.WriteLine("Содержание словаря после обновлений:");
            foreach (var dic in cd)
                Console.WriteLine("Key = {0}, Value = {1}", dic.Key, dic.Value);
        }
    }
}

2

РЕШЕНИЕ:

Код:
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var cd = new ConcurrentDictionary<char, int>();
            Parallel.For(0, 26, (i) =>
            {
                char key = (char)((int)'a'+i);
                cd.TryAdd(key, i);
            });
            Console.WriteLine("Содержание словаря после добавлений:");
            foreach (var dic in cd)
                Console.WriteLine("Key = {0}, Value = {1}", dic.Key, dic.Value);
            Console.WriteLine();
            Parallel.For(0, 26, (i) =>
            {
                char key = (char)((int)'a' + i);
                int val;
                cd.TryGetValue(key, out val);
                cd.TryUpdate(key, val * val, val);    
                //Альтернативный способ cd.AddOrUpdate(key, 0, (k, v) => v*v);
            });
            Console.WriteLine("Содержание словаря после обновлений:");
            foreach (var dic in cd)
                Console.WriteLine("Key = {0}, Value = {1}", dic.Key, dic.Value);
        }
    }
}



Вы здесь » Научно-образовательный IT-форум при КНИТУ-КАИ » Задачи и вопросы » [+] Многопоточная работа с Dictionary на C#