|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav Код: plaintext 1. 2. 3. 4. 5. 6. 7.
это оптимизатор может превратить в это Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 21:04 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
Dima T petrav Код: plaintext 1. 2. 3. 4. 5. 6. 7.
это оптимизатор может превратить в это Код: plaintext 1. 2. 3. 4. 5. 6.
Давно прораммируете? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 21:06 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav Давно прораммируете? Давно. А ты в асме не умеешь смотреть что на самом деле происходит? Там прекрасно все видно: осталось значение в регистре или обратно в память вернулось. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 21:17 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
Dima T petrav Давно прораммируете? Давно. А ты в асме не умеешь смотреть что на самом деле происходит? Там прекрасно все видно: осталось значение в регистре или обратно в память вернулось. В данном случае это вредное искусство. Код должен быть осмысленным, независимым от компилятора, от процессора, от ОС, логичным. Совершенно не важно что там в асме. В асм нужно смотреть только в кардинальных проблемах, которые подсвечивает профайлер. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 21:21 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav Код должен быть осмысленным, независимым от компилятора, от процессора, от ОС Во-вторых, произвольный код не может удовлетворять всем этим ограничениям - только "специально приготовленный". И вот тут-то может оказать необходимым смотреть машинный код разных компиляторов и, возможно, на разных платформах. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 21:44 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
Basil A. Sidorov petrav Код должен быть осмысленным, независимым от компилятора, от процессора, от ОС Во-вторых, произвольный код не может удовлетворять всем этим ограничениям - только "специально приготовленный". И вот тут-то может оказать необходимым смотреть машинный код разных компиляторов и, возможно, на разных платформах. И всё же предлагаю вернуться к теме топика. А то мы тут все пообсуждать мастаки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 21:47 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
32.4.2.2 Class thread Constructors thread(F&& f, Args&&... args); 7. Synchronization: The completion of the invocation of the constructor synchronizes with the beginning of the invocation of the copy of f. 32.4.2.5 Class thread Membersvoid join(); 4. Synchronization: The completion of the thread represented by *this synchronizes with (6.9.2) the corresponding successful join() return. "synchronizes with" это release+acquire barrier. Другими словами, создание потока является точкой синхронизации с родительским потоком, как и join. Так что все изменения произведенные перед созданием потока в глобальных переменных (и прочих видимых в других потоках) становятся видимыми для созданного потока, так же как изменения сделанные потоком становятся видимыми родителю после join. Так что мой ответ снова Является 100% )) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 21:57 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petravпредлагаю вернуться к теме топика. Не к чему возвращаться. Не существует понятия "потокобезопасное приложение". Потокобезопасным может быть только функция или метод класса и определение этой "безопасность" базируется на нежеланных различиях результата работы при последовательных вызовах из одного потока и параллельных из нескольких. Функция ГПСЧ, например, может творить любую дичь внутри и всё равно быть потокобезопасной, поскольку у неё в любом случае непредсказуемый результат. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 22:08 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav, авторПоток doWork(): - Увеличил значение "aaa" до двух и сохранил это в своём контексте (регистре). - И потерял значение. Вы беспокоитесь что поток завершится слишком быстро, и забудет обновить значение глобальной переменной? Напрасно. Программная модель C/C++ обеспечивает данный контракт. Вы дали указание программе изменить значение глобальной переменной, эта переменная будет правильно изменена. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 23:04 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
Подобный код обычно задают на собесах. И спрашивают что здесь происходит. Еще хуже если в код превносят гонки за состояниями. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
С организационной точки зрения вроде-бы все ОК. Но потоки должны выполнять работу в параллелизме. И эту опцию надо продемонстрировать. В данном примере двух-поточное приложение имеет место и должно работать. Но опция - никак себя не проявила. И если следующая эквивалентная трансформация дает тот-же эффект Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
то собеседующий может спросить к примеру - а зачем? Это - ошибка проектирования? Или троллинг? Я к чему это все. Когда вы хотите поговорить про кеши или скажем про кванты планировщика (которые будут иметь место в 1 варианте) то вы должны хотя-бы постараться принести в форум нечто РАСКРЫВАЮЩЕЕ возможности std::thread. Не ходя далеко - процессинг группы файлов например. Или рендеринг картинки частями. Это как драйв тест машины. Вы-же хотите "давануть" на газ чтоб послушать как звучит ваш новый ДВС или дизель. Так будьте-же вы инженером чьорт вас подери. Зачем детские примеры кидать? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 23:17 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav Basil A. Sidorov пропущено... Во-первых - утопия. Во-вторых, произвольный код не может удовлетворять всем этим ограничениям - только "специально приготовленный". И вот тут-то может оказать необходимым смотреть машинный код разных компиляторов и, возможно, на разных платформах. И всё же предлагаю вернуться к теме топика. А то мы тут все пообсуждать мастаки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 23:44 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
НеофитSQL petrav, авторПоток doWork(): - Увеличил значение "aaa" до двух и сохранил это в своём контексте (регистре). - И потерял значение. Вы беспокоитесь что поток завершится слишком быстро, и забудет обновить значение глобальной переменной? Напрасно. Программная модель C/C++ обеспечивает данный контракт. Вы дали указание программе изменить значение глобальной переменной, эта переменная будет правильно изменена. Я не мыслю в терминах "слишком быстро завершится потому". Это как доказательство математической теоремы: ситуация такая, потому что, теоремы-аксиомы и ч.т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2020, 23:58 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
mayton Так будьте-же вы инженером чьорт вас подери. Зачем детские примеры кидать? Это не детские примеры. Это нетривиальные примеры. Которые, вы, майтун, не можете решить. У вас на это просто не хватит квалификации. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 00:03 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav mayton Так будьте-же вы инженером чьорт вас подери. Зачем детские примеры кидать? Это не детские примеры. Это нетривиальные примеры. Которые, вы, майтун, не можете решить. У вас на это просто не хватит квалификации. Знаешь, есть выражение о том что один чудак может 100 мудрецов ушатать вопросами? Давай свои вопросы. Про кеши и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 00:13 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav, Резонный подход, неудачный пример. Вы спрашиваете, а не выпуклая ли в плоскость в евклидовой системе. Ответ - кривизна плоскости в евклидовой системе равна нулю, по определению выбранной системы. Так и тут - выбрав язык с++, вы приняли программную модель языка, где изменение значения переменной в вашем примере ее изменит. С точки зрения программы и программиста. Если нет внешних ссылок, оптимизатор может многое выкинуть и распечатать тройку из константы. Программная модель определяет видимое поведение программы, а не эффект ее на кэш, процессор, память или qbits. Поэтому ваша программа, которая не нарушает правил языка и не затрагивает области неопределенного поведения, выполнится с одинаковым наблюдаемым результатом на любом компьютере с исправным компилятором. Я собирался оговорить "где int длиннее двух битов", но это уже и так оговорено в стандарте. Можно разобрать пример вне С++, вы знаете ассемблер? Там нет вышеупомянутых гарантий. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 00:14 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
mayton petrav пропущено... Это не детские примеры. Это нетривиальные примеры. Которые, вы, майтун, не можете решить. У вас на это просто не хватит квалификации. Знаешь, есть выражение о том что один чудак может 100 мудрецов ушатать вопросами? Давай свои вопросы. Про кеши и прочее. Мой вопрос задан в первых постах. Просто и ясно. Точно так же ясный вопрос могут ушатать двадцать *удаков. Знакомо да? Вы же этим занимаетесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 00:20 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
По первому вопросу тебе уже ответили. Я не хочу повторять про потоко-безопасность. Вопрос был безсмыслицей. Но если я тебя лично чем то обидел - извини. Не буду сюда писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 00:33 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
mayton По первому вопросу тебе уже ответили. Я не хочу повторять про потоко-безопасность. Вопрос был безсмыслицей. Вопрос был спорным. Очень проблемным. И ты существуешь в мире где такие вопросы не существуют. В твоём мире они решены. mayton Но если я тебя лично чем то обидел - извини. Не буду сюда писать. Спасибо, лучше не писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 00:39 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky aaa не volatile так что технически компилятор имеет право хранить результат ++aaa в регистре в момент создания потока. Так что поток может увидеть старое значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 01:59 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 02:15 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
У ТС несомненно занимательная история с этим вопросом. Похоже, его кто-то подловил на этом простом примере, и успешно убедил используя малознакомые слова что в сях везде опасность. Человек пришел похвастаться новыми знаниями и подловить бывалых, но тут он себя почувствовал в дураках повторно. Я могу посочувствовать; когда мне было 12 лет меня поймали вопросом "что тяжелее, тонна железа или тонна дерева". На следующий день "словил" крутой загадкой учителя физики. Мое ликование было кратковременным, когда он объяснил что у них разный вес. Хороший был урок, не повторять (тем более защищать) чужие глупости. Своих всегда хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 02:30 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
НеофитSQL Я могу посочувствовать; когда мне было 12 лет меня поймали вопросом "что тяжелее, тонна железа или тонна дерева". На следующий день "словил" крутой загадкой учителя физики. Мое ликование было кратковременным, когда он объяснил что у них разный вес. Хороший был урок, не повторять (тем более защищать) чужие глупости. Своих всегда хватает. И что у тонны железа и у тонны дерева действительно разный вес? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 02:39 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
petrav, Несомненно. Тонна + это единица массы, вес - единица силы. Дерево легче на произведение положительной разницы объемов на плотность атмосферы. В вакууме легче, тк влага начнет испаряться Вам нравятся такие задачки? У вас впереди много удовольствия. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 02:53 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
rdb_dev petrav Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
В этом и был начальный вопрос. Осталось переписать исходный код так что бы он был потокобезопасным. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 03:02 |
|
Небольшой вопрос про std::thread
|
|||
---|---|---|---|
#18+
НеофитSQL petrav, Несомненно. Тонна + это единица массы, вес - единица силы. Дерево легче на произведение положительной разницы объемов на плотность атмосферы. В вакууме легче, тк влага начнет испаряться Вам нравятся такие задачки? У вас впереди много удовольствия. Ну, да, я ошибся. Но таких задачек я нарешался в школе. Что там было Перельман. Я может ошибся. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2020, 03:07 |
|
|
start [/forum/topic.php?fid=57&msg=40007145&tid=2017320]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 143ms |
0 / 0 |