Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным.
То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
Здравствуйте, Klatu, Вы писали:
K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным. K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
Выпрямляете все пальцы на правой руке.
Загибаете мизинец, безымянный и средний пальцы.
Большой палец распологаете между средним и указательным.
Загибаете указательный палец.
Дальнейшая распальцовка по обстановке.
Здравствуйте, 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();
}
}
}
Здравствуйте, Klatu, Вы писали:
K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным. K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
Здравствуйте, 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.
Здравствуйте, Klatu, Вы писали:
K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным. K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
статья 81 п.3б трудового кодекса, там доходчиво написано.
Здравствуйте, Klatu, Вы писали:
K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным. K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
А поподробнее контекст можно? Желательно с sequence-диаграммами обращения, взятым из production-кода или их подобием. Просто "обращение из разных потоков" далеко не всегда означает "одновременное обращение из разных потоков".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Klatu, Вы писали:
K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным. K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
Иногда никак. Это еще семечки. Бывает и хуже. Главное, не принимай близко к сердцу.
Здравствуйте, Klatu, Вы писали:
K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным. K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
На пальцах — не знаю (тут просто непонимание принципов многопотокового программирования), а вот так чтоб навсегда запомнил
Здравствуйте, Klatu, Вы писали:
K>Тут один девелопер утверждает, что если Dictionary (.NET) сделать статическим полем, то код автоматически станет потоко-безопасным. K>То есть уровень (не)понимания вопроса катастрофический. Как объяснить ему на пальцах, чтобы дошло?
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>А поподробнее контекст можно? Желательно с sequence-диаграммами обращения, взятым из production-кода или их подобием. Просто "обращение из разных потоков" далеко не всегда означает "одновременное обращение из разных потоков".
Даже если допустить, что обращение не одновременное (что неверно), то разделение объекта между тредами без использования барьера памяти все равно недопустимо.
Если ты не знаешь азы, то не позорься лучше со своими диаграммами.
Здравствуйте, Klatu, Вы писали:
ГВ>>А поподробнее контекст можно? Желательно с sequence-диаграммами обращения, взятым из production-кода или их подобием. Просто "обращение из разных потоков" далеко не всегда означает "одновременное обращение из разных потоков".
K>Даже если допустить, что обращение не одновременное (что неверно), то разделение объекта между тредами без использования барьера памяти все равно недопустимо.
Совершенно не обязательно явно вызывать барьер памяти при обращении к разделяемому ресурсу: он может выполняться "где-то рядом". Собственно, поэтому я и спросил про контекст.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Совершенно не обязательно явно вызывать барьер памяти при обращении к разделяемому ресурсу: он может выполняться "где-то рядом".
Верный способ напороться на проблемы. Но рядом тоже нет. И вообще их там нет.
А ты крайне много занимаешься домыслами.
Здравствуйте, Klatu, Вы писали:
ГВ>>Совершенно не обязательно явно вызывать барьер памяти при обращении к разделяемому ресурсу: он может выполняться "где-то рядом". K>Верный способ напороться на проблемы. Но рядом тоже нет. И вообще их там нет.
Что, вообще ни одной синхронизации во всём приложении?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!