как объяснить идиоту?...
От: Klatu  
Дата: 28.07.11 05:03
Оценка: :)
Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.
То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
Re: как объяснить идиоту?...
От: adontz Грузия http://adontz.wordpress.com/
Дата: 28.07.11 05:03
Оценка: +6
Здравствуйте, Klatu, Вы писали:

Тестовый приер где всё падает?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: как объяснить идиоту?...
От: Klatu  
Дата: 28.07.11 05:14
Оценка:
Здравствуйте, adontz, Вы писали:

A>Тестовый приер где всё падает?


баг будет проявляться очень нестабильно, а код вызывается не очень часто
Re: как объяснить идиоту?...
От: boot  
Дата: 28.07.11 05:20
Оценка: :)
Здравствуйте, Klatu, Вы писали:

K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

Выпрямляете все пальцы на правой руке.
Загибаете мизинец, безымянный и средний пальцы.
Большой палец распологаете между средним и указательным.
Загибаете указательный палец.
Дальнейшая распальцовка по обстановке.
Жизнеспособность прямо пропорциональна простоте!
Re[3]: как объяснить идиоту?...
От: adontz Грузия http://adontz.wordpress.com/
Дата: 28.07.11 05:25
Оценка: 30 (4) +2
Здравствуйте, Klatu, Вы писали:

K>баг будет проявляться очень нестабильно, а код вызывается не очень часто

using System;
using System.Collections.Generic;
using System.Threading;

namespace TestDictionary
{
    public static class Program
    {
        private static readonly IDictionary<int, int> _dictionary = new Dictionary<int, int>();
        private static readonly Random _random = new Random();

        public static void Main(string[] args)
        {
            for (int thread = 0; thread < 4; thread++)
                new Thread(
                    delegate()
                    {
                        for (int index = 0; ; index++)
                        {
                            int key = _random.Next(10);
                            int value = _random.Next(200) - 100;

                            if (value >= 0)
                            {
                                _dictionary[key] = value;
                            }
                            else
                            {
                                _dictionary.Remove(key);
                            }
                        }
                    }).Start();

            for (int thread = 0; thread < 4; thread++)
                new Thread(
                    delegate()
                    {
                        for (; ; )
                        {
                            int key = _random.Next(10);
                            int value;

                            if (_dictionary.TryGetValue(key, out value))
                            {
                            }
                        }
                    }).Start();
        }
    }
}

У меня падает на первой секунде.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: как объяснить идиоту?...
От: Sharov Россия  
Дата: 28.07.11 06:38
Оценка:
Здравствуйте, Klatu, Вы писали:

Скажите, что для этих целей есть ConcurrentDictionary и они не просто так отличаются названием.
Кодом людям нужно помогать!
Re: как объяснить идиоту?...
От: Lloyd Россия  
Дата: 28.07.11 06:40
Оценка: 1 (1)
Здравствуйте, Klatu, Вы писали:

K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

А на документацию сослаться не вариант?
Re[2]: как объяснить идиоту?...
От: andrey82  
Дата: 28.07.11 07:30
Оценка: +2 :))) :))
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Klatu, Вы писали:


K>>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

L>А на документацию сослаться не вариант?


Возможно, что его заклинило на этой часто встречающейся фразе:

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Re: как объяснить идиоту?...
От: Deprivator  
Дата: 29.07.11 19:45
Оценка: +1
Здравствуйте, Klatu, Вы писали:

K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

статья 81 п.3б трудового кодекса, там доходчиво написано.
In P=NP we trust.
Re: как объяснить идиоту?...
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 01.08.11 02:01
Оценка: :)
Здравствуйте, Klatu, Вы писали:

K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

А поподробнее контекст можно? Желательно с sequence-диаграммами обращения, взятым из production-кода или их подобием. Просто "обращение из разных потоков" далеко не всегда означает "одновременное обращение из разных потоков".

Я это спрашиваю, имея в виду вот это обсуждение
Автор: Klatu
Дата: 29.07.11
.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: как объяснить идиоту?...
От: alexeiz  
Дата: 01.08.11 06:16
Оценка:
Здравствуйте, Klatu, Вы писали:

K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

Иногда никак. Это еще семечки. Бывает и хуже. Главное, не принимай близко к сердцу.
Re: как объяснить идиоту?...
От: sourcerer Германия  
Дата: 02.08.11 09:11
Оценка: 17 (3)
Здравствуйте, Klatu, Вы писали:

K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

На пальцах — не знаю (тут просто непонимание принципов многопотокового программирования), а вот так чтоб навсегда запомнил

http://www.amazon.com/Art-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916/ref=sr_1_1?ie=UTF8&amp;qid=1312276183&amp;sr=8-1

категорически рекомендую.
Недостатки прощаются, достоинства — никогда.
Re: как объяснить идиоту?...
От: alf_kadett  
Дата: 02.08.11 13:36
Оценка: -1
Здравствуйте, Klatu, Вы писали:

K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.

K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?

Пойти в HR и написать заявление, дел-то.
Re[2]: как объяснить идиоту?...
От: Klatu  
Дата: 03.08.11 05:32
Оценка: :)))
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А поподробнее контекст можно? Желательно с sequence-диаграммами обращения, взятым из production-кода или их подобием. Просто "обращение из разных потоков" далеко не всегда означает "одновременное обращение из разных потоков".


Даже если допустить, что обращение не одновременное (что неверно), то разделение объекта между тредами без использования барьера памяти все равно недопустимо.
Если ты не знаешь азы, то не позорься лучше со своими диаграммами.
Re[2]: как объяснить идиоту?...
От: Klatu  
Дата: 03.08.11 05:32
Оценка:
Здравствуйте, sourcerer, Вы писали:

S>На пальцах — не знаю (тут просто непонимание принципов многопотокового программирования), а вот так чтоб навсегда запомнил


S>http://www.amazon.com/Art-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916/ref=sr_1_1?ie=UTF8&amp;qid=1312276183&amp;sr=8-1


S>категорически рекомендую.


А на русском есть?
Re[2]: как объяснить идиоту?...
От: Undying Россия  
Дата: 03.08.11 06:00
Оценка: +1
Здравствуйте, alf_kadett, Вы писали:

_>Пойти в HR и написать заявление, дел-то.


Ты встретившись с проблемой всегда от нее пытаешься убежать?
Re[3]: как объяснить идиоту?...
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 03.08.11 22:31
Оценка:
Здравствуйте, Klatu, Вы писали:

ГВ>>А поподробнее контекст можно? Желательно с sequence-диаграммами обращения, взятым из production-кода или их подобием. Просто "обращение из разных потоков" далеко не всегда означает "одновременное обращение из разных потоков".


K>Даже если допустить, что обращение не одновременное (что неверно), то разделение объекта между тредами без использования барьера памяти все равно недопустимо.


Совершенно не обязательно явно вызывать барьер памяти при обращении к разделяемому ресурсу: он может выполняться "где-то рядом". Собственно, поэтому я и спросил про контекст.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: как объяснить идиоту?...
От: Klatu  
Дата: 06.08.11 06:24
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Совершенно не обязательно явно вызывать барьер памяти при обращении к разделяемому ресурсу: он может выполняться "где-то рядом".


Верный способ напороться на проблемы. Но рядом тоже нет. И вообще их там нет.
А ты крайне много занимаешься домыслами.
Re[5]: как объяснить идиоту?...
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.08.11 06:50
Оценка:
Здравствуйте, Klatu, Вы писали:

ГВ>>Совершенно не обязательно явно вызывать барьер памяти при обращении к разделяемому ресурсу: он может выполняться "где-то рядом".

K>Верный способ напороться на проблемы. Но рядом тоже нет. И вообще их там нет.

Что, вообще ни одной синхронизации во всём приложении?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: как объяснить идиоту?...
От: Klatu  
Дата: 06.08.11 06:55
Оценка: -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Что, вообще ни одной синхронизации во всём приложении?


Синхронизация и барьер памяти не одно и то же. Опять палишься.
Вообще есть. Конкретно в этой части — нет.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.