Синхронизация на доступ при добавлении объекта
От: Аноним  
Дата: 11.03.10 09:30
Оценка:
Добрый день,
На собеседовании задали вопрос:

есть класс:

    public class SimpleCub 
    {
        public int X
        {
            get;
            private set;
        }

        public int Y
        {
            get;
            private set;
        }

        public int Z
        {
            get;
            private set;
        }

        public SimpleCub(int x, int y, int z)
        {
            X = x;
            Y = y;
            Z = z;
        }

        #region Equals_GetHashCode Members

        public override bool Equals(Object obj)
        {
            if (obj == null || GetType() != obj.GetType())
                return false;
            SimpleCub simpleCube = (SimpleCub)obj;
            return ((simpleCube.X == X) && (simpleCube.Y == Y) && (simpleCube.Z == Z));
        }

        public override int GetHashCode()
        {
            Func<byte[], int> calcHash = (arr) =>
                                             {
                                                 using (RIPEMD160Managed myRIPEMD160 = new RIPEMD160Managed())
                                                 {
                                                     return BitConverter.ToInt32(myRIPEMD160.ComputeHash(arr), 0);
                                                 }
                                             };
            
            List<byte> listBytes = new List<byte>(BitConverter.GetBytes(X));
            listBytes.AddRange(BitConverter.GetBytes(Y));
            listBytes.AddRange(BitConverter.GetBytes(Z));
            return calcHash(listBytes.ToArray());
        }

        #endregion
    }


по определенным правилам создаются допустим 10 экземпляров данного типа и добавляются в List<SimpleCub> list1
эти же созданные экземпляры добавляются в List<SimpleCub> list2
создается дочерний поток thread1 и передается в него list1
создается дочерний поток thread2 и передается в него list2

в дочерних потоках создается (в 1-м):
dic1 = new Dictionary<SimpleCub, object>();

(во 2-м):
dic2 = new Dictionary<SimpleCub, object>();

и соответсвенно добавляются элементы SimpleCub (в качестве ключа) в dic1 из list1
добавляются элементы SimpleCub (в качестве ключа) в dic2 из list2

далее в каждом из дочерних потоках создаются новые SimpleCub и добавляются в dic1 или dic2 в качестве ключа.

Вопрос:
Нужна ли блокировка(синхронизация) при добавлении элементов в dic1 и dic2 ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.