Если меня не волнует точность - следует ли мне использовать атомарную переменную float вместо double - это двойной атомар на 64-битном процессоре с 64-битным приложением

Сейчас я использую переменные типа double, чтобы использовать их в качестве счетчиков.

Однако мое приложение является многопоточным, поэтому, если операция будет атомарной, для меня это будет намного лучше.

Я могу использовать, однако числа могут выходить за пределы int, и после этого мне не нужна точность. поскольку они будут использоваться как счетчики

В: По точности всегда упоминается после. ? Я имею ввиду операции меньше 1?

В: Мой вопрос: по какой причине я хочу использовать double вместо float?

Мой процессор - это ядро ​​последнего поколения i 7 2600k 64 бит, приложение также 64 бит

Можно ли сказать, что double в 64-битном приложении является потокобезопасным?

.net 4.5 приложение c # wpf


person MonsterMMORPG    schedule 21.08.2014    source источник
comment
Ваш пост, похоже, посвящен двум вещам: (A) числовые характеристики чисел с плавающей запятой и (B) потокобезопасность. Это довольно не связанные между собой темы, я бы предложил разделить их на два отдельных SO-вопроса.   -  person Oliver Charlesworth    schedule 21.08.2014
comment
Можно сказать, что double в 64-битном приложении атомарно, а не потокобезопасно. Также это зависит от того, что вы имели в виду под потокобезопасность   -  person Sriram Sakthivel    schedule 21.08.2014
comment
Если вас не интересуют субцелочисленные значения, почему вы используете float или double? Почему не int или long? Обратите внимание, что если вы попытаетесь добавить 1 к большому float или double, вы просто вернете то же значение ... другими словами, для больших значений разница между двумя ближайшими значениями больше 1.   -  person Jon Skeet    schedule 21.08.2014
comment
@SriramSakthivel: Можем ли мы? (stackoverflow.com/questions/ 2736541 /)   -  person Oliver Charlesworth    schedule 21.08.2014
comment
@JonSkeet очень хороший момент, я должен использовать длинные, которые никогда раньше не использовались :) Я также тестировал и не является потокобезопасным, если вы используете переменную ++. Итак, мой другой вопрос: следует ли использовать объект блокировки или заблокировать эти переменные?   -  person MonsterMMORPG    schedule 21.08.2014
comment
Возможно, вы ищете Interlocked.Increment.   -  person Corak    schedule 21.08.2014
comment
@MonsterMMORPG: Посмотрите на класс Interlocked ... обратите внимание, что ++ никогда не является потокобезопасным, даже для атомарных типов - потому что он читает / изменяет / записывает, а другие потоки могут находиться между ними.   -  person Jon Skeet    schedule 21.08.2014
comment
@Corak похоже на то, что я очень ищу   -  person MonsterMMORPG    schedule 21.08.2014
comment
@OliCharlesworth Да, мы можем. В этом вопросе предполагается, что это x86. Я сказал 64-битное приложение. И здесь вопрос тоже к тому же. См. это   -  person Sriram Sakthivel    schedule 21.08.2014
comment
Если использовать Interlocked.Increment, будет ли потокобезопасным читать длинные значения? @JonSkeet   -  person MonsterMMORPG    schedule 21.08.2014
comment
@MonsterMMORPG: Вы бы использовали Interlocked.Read.   -  person Jon Skeet    schedule 21.08.2014
comment
@JonSkeet Тай, очень благодарен за ответ. Можете ли вы также взглянуть на этот вопрос: stackoverflow.com/questions/25417084/   -  person MonsterMMORPG    schedule 21.08.2014