Здравствуйте, Jolly Roger, Вы писали:
_FR>>А разве можно на Interlocked сделать добавление/удаление флага?
JR>Можно с применением Interlocked.CompareExchange
Ну ты пример все-таки приведи. Относяшийся к топику.
Re[4]: Использование множеств в многопоточном приложении
Здравствуйте, Jolly Roger, Вы писали:
_FR>>А если у енама underlying-тип — восьмибайтный, тоже будет "безопасно"? JR>+1
JR>И даже если 4-хбайтный, но не выровнен на границу (нарпимер при Pack == 1), то тоже может оказаться непотокобезопасным.
Да ну, выходит спека нагло врет?
Reads and writes of the following data types are atomic: bool, char, byte, sbyte, short, ushort, uint, int, float, and reference types. In addition, reads and writes of enum types with an underlying type in the previous list are also atomic. Reads and writes of other types, including long, ulong, double, and decimal, as well as user-defined types, are not guaranteed to be atomic.
Re[9]: Использование множеств в многопоточном приложении
Здравствуйте, Lloyd, Вы писали:
TK>>В случае с вашим кодом (использование enum) можно использовать Interlocked операции для записи изменений и обычное чтение без дополнительных блокировок.
L>А можно пример использоания interlocked в применении к данному случаю?
Как было предложено выше, надо использовать Interlocked.CompareExchange — делается цикл результатом выхода из которого является установленный / сброшенный флаг.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[5]: Использование множеств в многопоточном приложении
От:
Аноним
Дата:
08.11.10 10:35
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Jolly Roger, Вы писали:
_FR>>>А если у енама underlying-тип — восьмибайтный, тоже будет "безопасно"? JR>>+1
JR>>И даже если 4-хбайтный, но не выровнен на границу (нарпимер при Pack == 1), то тоже может оказаться непотокобезопасным.
L>Да ну, выходит спека нагло врет? L>
L>Reads and writes of the following data types are atomic: bool, char, byte, sbyte, short, ushort, uint, int, float, and reference types. In addition, reads and writes of enum types with an underlying type in the previous list are also atomic. Reads and writes of other types, including long, ulong, double, and decimal, as well as user-defined types, are not guaranteed to be atomic.
Здравствуйте, TK, Вы писали:
L>>Ну ты пример все-таки приведи. Относяшийся к топику. TK>Если уровень конкуренции не высок то, вполне достаточно подобного кода.
Скорее не врёт, но не охватывает всех возможных ситуаций. Пока Вы пользуетесь дефолтным выравниванием, это утверждение справедливо. Если-же Вы испльзуете Pack, то выравнивание задаётся этим аттрибутом. В этом случае половина int может оказаться, например, в одной 32-хбайтной группе, а другая — в другой. В этих условиях чтение такой переменной вполне может оказаться неатомарным, так как процессору потребуется два обращения к шине для её считывания.
PS Я рад, что это Вас веселит.
"Нормальные герои всегда идут в обход!"
Re[14]: Использование множеств в многопоточном приложении
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Lloyd, Вы писали:
L>>А зачем тут приведение к int-у? Чтобы умнее выглядело?
L>Сорри, тут ступил.
Бывает. Но у меня к Вам личная просьба — нельзя-ли формулировать Ваши сомнения или вопросы, несколько более корректно, не предполагая самой формулировкой, что Ваш собеседник — дурак? Ведь даже если он ошибается, это ведь ещё не повод, верно? Ведь каждый может ошибиться, вот как Вы, например
Спасибо.
"Нормальные герои всегда идут в обход!"
Re[14]: Использование множеств в многопоточном приложении
Здравствуйте, Jolly Roger, Вы писали:
JR>Скорее не врёт, но не охватывает всех возможных ситуаций. Пока Вы пользуетесь дефолтным выравниванием, это утверждение справедливо. Если-же Вы испльзуете Pack, то выравнивание задаётся этим аттрибутом. В этом случае половина int может оказаться, например, в одной 32-хбайтной группе, а другая — в другой. В этих условиях чтение такой переменной вполне может оказаться неатомарным, так как процессору потребуется два обращения к шине для её считывания.
Подтверждения конечно же не будет?
Re[15]: Использование множеств в многопоточном приложении
Здравствуйте, Jolly Roger, Вы писали:
L>>Сорри, тут ступил.
JR>Бывает. Но у меня к Вам личная просьба — нельзя-ли формулировать Ваши сомнения или вопросы, несколько более корректно, не предполагая самой формулировкой, что Ваш собеседник — дурак?
Уважаемый, это вообще-то вы с FRED-ом влезли со своей демонстрацией ума, не я, так что примените свой совет прежде всего к себе самому.
Re[15]: Использование множеств в многопоточном приложении
Здравствуйте, Lloyd, Вы писали:
L>Подтверждения конечно же не будет?
Нет, не будет. Если это Вас интересует, воспользуйтесь гуглем. Например, поинтересуйтесь, почему нативные Interlocked-функции оперируют только выровненными на 4-хбайтную границу переменными.
Или не интересуйтесь, мне всё равно.
"Нормальные герои всегда идут в обход!"
Re[16]: Использование множеств в многопоточном приложении
Здравствуйте, Lloyd, Вы писали:
JR>>Бывает. Но у меня к Вам личная просьба — нельзя-ли формулировать Ваши сомнения или вопросы, несколько более корректно, не предполагая самой формулировкой, что Ваш собеседник — дурак?
L>Уважаемый, это вообще-то вы с FRED-ом влезли со своей демонстрацией ума, не я, так что примените свой совет прежде всего к себе самому.
Печально, когда на простой вопрос "А если у енама underlying-тип — восьмибайтный, тоже будет "безопасно"?" вместо того, что бы просто ответить "не, не будет" или "всё равно будет", начинают говорить, что вот "влезли" и прочие неприятные слова
Как будто, что показалось, что своим вопросом я хотел кого-то оскорбить Никуда я не влезал. Я задал вопрос. А вот вы, вместо ответа на него, повели себя не достойно, начав оправдываться, а, впоследствии, и огрызаться
Help will always be given at Hogwarts to those who ask for it.
Re[17]: Использование множеств в многопоточном приложении
Здравствуйте, _FRED_, Вы писали:
L>>Уважаемый, это вообще-то вы с FRED-ом влезли со своей демонстрацией ума, не я, так что примените свой совет прежде всего к себе самому.
_FR>Печально, когда на простой вопрос "А если у енама underlying-тип — восьмибайтный, тоже будет "безопасно"?" вместо того, что бы просто ответить "не, не будет" или "всё равно будет",
Про восьмибайтный enum я ответил достаточно предсказуемо, не так ли?
_FR>начинают говорить, что вот "влезли" и прочие неприятные слова
А тут пошло передергивание, т.к. ответ про "влезли" был уже в совсем другом месте.
_FR>Как будто, что показалось, что своим вопросом я хотел кого-то оскорбить Никуда я не влезал. Я задал вопрос. А вот вы, вместо ответа на него, повели себя не достойно, начав оправдываться,