<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3822032</guid>
        <pubDate>Tue, 25 Feb 2020 12:05:14 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3822032</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821977'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-25T04:11:13+03:00">25.02.20, 01:11</time></span><div class='quote '>Ну не требует и не требует... Но почему одна и та же студия при указании разных стандартов ведет себя по разному?</div></div>Поиграйся оптимизацией, скорее всего и в дебаге, и в релизе сможешь получить оба эффекта.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821985</guid>
        <pubDate>Tue, 25 Feb 2020 04:48:08 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821985</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821977'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-25T01:11:13+00:00">25.02.20, 01:11</time></span><div class='quote '>Но почему одна и та же студия при указании разных стандартов ведет себя по разному?</div></div><br>
Потому что создатель компилятора поспорил со своим коллегой, что это изменение кодревью пройдёт  :D Чисто теоретически ты какой ответ ожидаешь услышать? Такая инициализация это деталь реализации, и она может быть любой, не противоречащей стандарту, что мы и наблюдаем.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821977</guid>
        <pubDate>Tue, 25 Feb 2020 01:11:13 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821977</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821880'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-23T23:37:23+00:00">23.02.20, 23:37</time></span><div class='quote '>Вообще достаточно странно</div></div><br>
Да нет, я уже спрашивал. Но мне в тупую ответили:<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821876'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2020-02-23T20:19:10+00:00">23.02.20, 20:19</time></span><div class='quote '>Потому что стандарт не требует инициировать переменные на стеке нулём.</div></div><br>
<strong class='tag-b'>amk</strong>, извини, но это СТАНДАРТНЫЙ ОТВЕТ от Копетана Очевидность&#33;<br>
<br>
Ну не требует и не требует... Но почему одна и та же студия при указании разных стандартов ведет себя по разному?<br>
Я же привел таблицу выше&#33;]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821885</guid>
        <pubDate>Mon, 24 Feb 2020 06:44:57 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821885</link>
        <description><![CDATA[OpenGL: Вообще достаточно странно, потому что студия на моей памяти в дебаге всегда переменные инициализировала чем-то вроде 0xCCCCCCCC.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821880</guid>
        <pubDate>Sun, 23 Feb 2020 23:37:23 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821880</link>
        <description><![CDATA[Qraizer: Та не, просто повезло. Хотя в данном случае, скорее не повезло. 100пудово в прологе main() стоит что-то типа sub esp, XX, где XX суммарный размер локальных переменных, и нули весьма глубоко внутри стека на входе в main() никак от самой main() не зависят.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821876</guid>
        <pubDate>Sun, 23 Feb 2020 20:19:10 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821876</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821870'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-23T19:10:56+00:00">23.02.20, 19:10</time></span><div class='quote '>Почему в остальных (с++11, с++14) в дебаге <br>
не нуль</div></div> Потому что стандарт не требует инициировать переменные на стеке нулём.]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821872</guid>
        <pubDate>Sun, 23 Feb 2020 19:21:06 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821872</link>
        <description><![CDATA[Славян: Ну мож в новых студиях стали очищать стэк. Заботятся. :rolleyes:]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821870</guid>
        <pubDate>Sun, 23 Feb 2020 19:10:56 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821870</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821868'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-23T16:56:27+00:00">23.02.20, 16:56</time></span><div class='quote '>В дебаге там сразу 0 на стеке</div></div><br>
Ну это я уж догадался. Вопрос в другом. Почему в остальных (с++11, с++14) в дебаге <br>
не нуль, а мне только&quot;повезло&quot; с с++17 и только со студийным компилером? <br>
Вот тут мистика.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821868</guid>
        <pubDate>Sun, 23 Feb 2020 16:56:27 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821868</link>
        <description><![CDATA[Qraizer: В дебаге там сразу 0 на стеке, в релизе не 0.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821831</guid>
        <pubDate>Sun, 23 Feb 2020 06:23:22 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821831</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821822'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T21:38:45+00:00">22.02.20, 21:38</time></span><div class='quote '>На что валидируется? На то что если он не нулевой, то вызвать член через указатель? А расскажи ка, когда он у тебя будет нулевым? В каком месте он у тебя нулевой? Там мусор будет содержатся, и соответственно твоя валидация сработает не так, как ты ожидаешь.</div></div><br>
Ты прав.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821822'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T21:38:45+00:00">22.02.20, 21:38</time></span><div class='quote '>То что она у тебя не валиться еще ни о чем совершенно не говорит.</div></div><br>
Ты прав.<br>
<br>
 :blush:]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821830</guid>
        <pubDate>Sun, 23 Feb 2020 06:20:38 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821830</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821822'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T21:38:45+00:00">22.02.20, 21:38</time></span><div class='quote '>Ты вообще в дебаге наверно запускал, вот у тебя и работало все, или так звезды сошлись, что неинициализированный указатель у тебя оказался 0.</div></div><br>
Скорее всего так сошлись звезды  :lol: Но это полный песец, и объяснения у меня этому нет.<br>
Да, я с тобой сейчас согласен. Да и ранее, в принципе, с твоей наводки увидел не инициализируемое<br>
поле класса. Но ведь работало - и это меня смущало, что программа должна падать, а она никак и не<br>
падает&#33; И вот утром пришла мысль поэксперементировать с режимами сборки, и вот какая любопытная<br>
табличка у меня вышла:<br>
<br>
<table class='post_table tag-table'><tr><th>Сборка</th><th>с++11</th><th>с++14</th><th>с++17</th></tr><tr><td>MSVS 2017 Debug x32</td><td>-</td><td>-</td><td>+</td></tr><tr><td>MSVS 2017 Release x32</td><td>-</td><td>-</td><td>-</td></tr><tr><td>MinGW 7.3.0 Debug x32</td><td>-</td><td>-</td><td>-</td></tr><tr><td>MinGW 7.3.0 Release x32</td><td>-</td><td>-</td><td>-</td></tr></table><br>
где вылет &#39;-&#39;, а норм работа &#39;+&#39;<br>
<br>
А у меня как раз все сборки и тесты были под MSVS 2017 Debug x32 с++17 <br>
<br>
Да, сейчас изменил - добавил инициализацию nullptr<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">class FreeStack {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::atomic&#60;Node&#60;T&#62;*&#62; Head = nullptr; // &#60;---------------- вот тут</div><div class="code_line">&nbsp;&nbsp;public:</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
И во всех вариантах работа стала нормальной. Получается с MSVS 2017 Debug x32 с++17<br>
какая-то мистика.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821822</guid>
        <pubDate>Sat, 22 Feb 2020 21:38:45 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821822</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821759'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T08:38:54+00:00">22.02.20, 08:38</time></span><div class='quote '>Ты привел дичь, которая не компилируется. </div></div><br>
Это не дичь, а псевдокод, чтоб показать проблему.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821759'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T08:38:54+00:00">22.02.20, 08:38</time></span><div class='quote '>Все работает.<br>
А в моем коде есть строчка:</div></div><br>
И судя по всему ты не увидел в этом коде проблемы. И это пичально.<br>
Не знаю как тебе еще пояснить, тебе и <strong class='tag-b'>Qraizer</strong> и я писал. Но ты не увидел проблемы. Ты вообще в дебаге наверно запускал, вот у тебя и работало все, или так звезды сошлись, что неинициализированный указатель у тебя оказался 0. Короче ладно, пофигу. Когда AV выхватишь в проде, тогда до тебя дойдет в чем у тебя ошибка заключается, а ты ее выхватишь в любом случае рано или поздно. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821759'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T08:38:54+00:00">22.02.20, 08:38</time></span><div class='quote '>Т.е., как видишь, указатель сперва валидируется, и только если норм берется его значение поля OldHead-&gt;Data.<br>
А это ты почему-то проигнорил </div></div><br>
На что валидируется? На то что если он не нулевой, то вызвать член через указатель? А расскажи ка, когда он у тебя будет нулевым? В каком месте он у тебя нулевой? Там мусор будет содержатся, и соответственно твоя валидация сработает не так, как ты ожидаешь.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821759'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T08:38:54+00:00">22.02.20, 08:38</time></span><div class='quote '>Так что программа не валится. Но &quot;да&quot;, с явной инициализацией вершины будет точнее. </div></div><br>
То что она у тебя не валиться еще ни о чем совершенно не говорит.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821784</guid>
        <pubDate>Sat, 22 Feb 2020 13:22:45 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821784</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821682'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T03:35:36+00:00">21.02.20, 03:35</time></span><div class='quote '>И нахрена тогда std::shared_ptr раз память все равно течет? Вопросов больше чем ответов.</div></div>Потому что у тебя не shared_ptr, а указатель на shared_ptr. Точнее, на Node, внутри которого shared_ptr, неважно. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-22T13:27:34+00:00">22.02.20, 13:27</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821699'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T09:33:46+00:00">21.02.20, 09:33</time></span><div class='quote '>Это отдельная тема для разговора. Одно описание проблемы займет несколько листов.</div></div>Зачем оно нам? Тебе было сложно написать два предложения по-русски, а не тарабарски?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821773</guid>
        <pubDate>Sat, 22 Feb 2020 11:49:44 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821773</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821772'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-22T11:18:20+00:00">22.02.20, 11:18</time></span><div class='quote '>В этой проблеме предполагается возможность прерывания и продолжения операций. </div></div><br>
Нет, не предполагается. ABA это про ситуацию, когда менеджер памяти выдал указатель на ячейку памяти, которая юзалась ранее, но уже была освобождена. Тогда у тебя появляется шанс на успешный compare_exchange в то время, когда он не должен быть таковым.<br>
И кстати, я только сейчас заметил, что добавление второго читателя или писателя у тебя всё сломает даже безотносительно ABA.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821772</guid>
        <pubDate>Sat, 22 Feb 2020 11:18:20 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821772</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>OpenGL</strong>, прочёл про ABA - это ясно не мой случай. В этой проблеме предполагается возможность прерывания и продолжения операций. У меня же операции атомарные. И я манипулирую адресами, а одинаковое значение указателя не может ссылаться на разные ячейки памяти.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821768</guid>
        <pubDate>Sat, 22 Feb 2020 10:17:59 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821768</link>
        <description><![CDATA[OpenGL: Простая задача, он говорил  :lol: А ведь ты ещё даже не учитываешь барьеры, не слышал про ABA (которая, кстати, может и не проявится - хз, думать надо) и вообще у тебя пока ещё один читатель и один писатель, что жизнь сильно упрощает  :lool:]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821764</guid>
        <pubDate>Sat, 22 Feb 2020 10:08:43 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821764</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821685'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T06:15:07+00:00">21.02.20, 06:15</time></span><div class='quote '>Если первый поток успел вызвать Pop раньше, чем второй Push то во второй строке будет AV:</div></div><br>
Похоже что оч редко (именно в момент переключения потоков), но потенциально может.<br>
Буду <a class='tag-url' href='https://ru.cppreference.com/w/cpp/atomic/memory_order' target='_blank'>это изучать</a> - по идее должно как-то помочь в данной ситуации  :whistle:]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821759</guid>
        <pubDate>Sat, 22 Feb 2020 08:38:54 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821759</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821685'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T06:15:07+00:00">21.02.20, 06:15</time></span><div class='quote '>Ради понимания, попробуй создать консольное приложение и набери там, ну либо просто внимательно взгляни на этот код:</div></div><br>
Ты привел дичь, которая не компилируется. <br>
<br>
Я твой код немного исправил, чтобы был как-то похож на мой и чтобы компилировался и исполнялся:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;memory&#62;</div><div class="code_line">#include &#60;atomic&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">struct Node {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::shared_ptr&#60;T&#62; Data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Node* Next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Node(T const&amp; iData): &nbsp; Data(std::make_shared&#60;T&#62;(iData)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Node start&quot; &#60;&#60; std:: endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;~Node() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Node stop&quot; &#60;&#60; std:: endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;std::atomic&#60;Node&#60;std::string&#62;*&#62; Head;</div><div class="code_line">&nbsp;&nbsp;Node&#60;std::string&#62;* OldHead = Head.load(); </div><div class="code_line">&nbsp;&nbsp;if (OldHead) std::cout &#60;&#60; OldHead-&#62;Next; &nbsp;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Все работает.<br>
А в моем коде есть строчка:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">return OldHead ? OldHead-&#62;Data : std::shared_ptr&#60;T&#62;();</div></ol></div></div></div></div><br>
Т.е., как видишь, указатель сперва валидируется, и только если норм берется его значение поля OldHead-&gt;Data.<br>
А это ты почему-то проигнорил  :-?<br>
<br>
Хотя, все равно, код не одинаковый. Мою прогу сколько раз не запускал - сбоя ни разу (вообще ни разу) не было.<br>
Буду разбираться, где же и почему &quot;мне повезло&quot;. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-22T08:53:00+00:00">22.02.20, 08:53</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821687'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T06:22:01+00:00">21.02.20, 06:22</time></span><div class='quote '>если звёзды не сошлись, из-за aba проблемы</div></div><br>
Можно подробнее, а что это за &quot;aba проблема&quot;? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-22T09:10:01+00:00">22.02.20, 09:10</time></span></span><br>
Немного исправил код Run() <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;void Run() {</div><div class="code_line">&nbsp;&nbsp;Node&#60;std::string&#62;* Tmp = Stack.Head.load();</div><div class="code_line">&nbsp;&nbsp;std::cout &#60;&#60; Tmp &#60;&#60; std::endl;</div></ol></div></div></div></div><br>
И прогнал под отладкой - Tmp получает nullptr<br>
А как я уже писал выше, у меня Pop() работает с проверкой<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;return OldHead ? OldHead-&#62;Data : std::shared_ptr&#60;T&#62;();</div></ol></div></div></div></div><br>
Так что программа не валится. Но &quot;да&quot;, с явной инициализацией вершины будет точнее. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-22T09:22:05+00:00">22.02.20, 09:22</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821665'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T18:27:17+00:00">20.02.20, 18:27</time></span><div class='quote '>Ещё мне не нравится, что твой Pop() может вернуть ошибку посредством пустого shared_ptr. Придётся везде проверки пихать. Но с фрилуком иначе, боюсь, и не получится.</div></div><br>
Вечером попробую тест поставить - вообще ничего не ложить в стек, а в цикле пробовать все время брать из пустого. Ну и запущу под Линухом под  Valgrind&#39;ом.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821699</guid>
        <pubDate>Fri, 21 Feb 2020 09:33:46 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821699</link>
        <description><![CDATA[Pavia: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821631'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T12:49:08+00:00">20.02.20, 12:49</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821541'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T22:35:33+00:00">19.02.20, 22:35</time></span><div class='quote '>По поводу QT проблемы с глобальными сиглтонами из-за параллельной сборки он в исполняемые файлы пихает несколько штук. Пришлось через разделяемую память делать свой синглтон и на основе него мьютексы для блокировок.</div></div><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821544'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T01:22:32+00:00">20.02.20, 01:22</time></span><div class='quote '>Я вам рассказал про подводные камни. А что с ними делать это вам решать.</div></div>Этих фраз даже я не понял. Набор слов. <strong class='tag-b'>Pavia</strong>, попрошу быть конкретнее, чтобы тебя можно было понимать по-русски. Так что, увы, не рассказал.</div></div><br>
Это отдельная тема для разговора. Одно описание проблемы займет несколько листов. Только потому что Вы не подготовлены, а терминология в данной области оставляет желать лучшего.И ещё столько же описание корня проблемы. <br>
<br>
Тест я год назад делал вот выложен:<br>
<a class='tag-url' href='https://www.programmersforum.ru/showthread.php?t=328066' target='_blank'>https://www.programmersforum.ru/showthread.php?t=328066</a><br>
<br>
Сейчас я в командировке и сделать скриншоты с бинарником и отладчиком не получится... Судя по коду это вариант с 1 Юнитом. А так для полной демонстрации нужно сделать 2-х агентов для наглядности. <br>
<br>
PS. Постараюсь на следующей неделе сделать.]]></description>
        <author>Pavia</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821687</guid>
        <pubDate>Fri, 21 Feb 2020 06:22:01 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821687</link>
        <description><![CDATA[OpenGL: А вообще по-моему у тебя тут есть риск вытащить один и тот же элемент дважды, если звёзды не сошлись, из-за aba проблемы. Да, вероятность мала, но тем не менее]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821686</guid>
        <pubDate>Fri, 21 Feb 2020 06:15:41 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821686</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821684'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T06:06:10+00:00">21.02.20, 06:06</time></span><div class='quote '>Сам-то не видишь тут противоречия?</div></div><br>
Противоречие одно - эти механизмы нечасто были использованы. А ведь кода совсем мало.<br>
Поэтому и столько обсуждений. А не потому, что тут что-то из ряда вон громоздкое и<br>
сложное. ИМХО.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821685</guid>
        <pubDate>Fri, 21 Feb 2020 06:15:07 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821685</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821666'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T18:40:02+00:00">20.02.20, 18:40</time></span><div class='quote '>Освобождений не было. Изменил код:</div></div><br>
Я если честно так и не увидел - где ты изменил код? У тебя как было AV, так оно и осталось ровно в том же месте.<br>
Если первый поток успел вызвать Pop раньше, чем второй Push то во второй строке будет AV:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Node&#60;T&#62;* OldHead = Head.load();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (OldHead &amp;&amp; !Head.compare_exchange_weak(OldHead, OldHead-&#62;Next)); //! &#60;&#60;&#60;&#60;&#60; Тут бьудет Access Violation, конкретно на вот этой конструкции - OldHead-&#62;Next</div></ol></div></div></div></div><br>
Пропустил или забыл что ли?<br>
<br>
На всякий случай просто приведу пример.<br>
Ради понимания, попробуй создать консольное приложение и набери там, ну либо просто внимательно взгляни на этот код:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;template &#60;typename T&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct Node {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::shared_ptr&#60;T&#62; Data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Node* Next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Node(T const&amp; iData): &nbsp; Data(std::make_shared&#60;T&#62;(iData)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Node start&quot; &#60;&#60; std:: endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;~Node() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Node stop&quot; &#60;&#60; std:: endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp; std::atomic&#60;Node&#60;T&#62;*&#62; Head;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Node&#60;T&#62;* OldHead = Head.load();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; std::cout &#60;&#60; OldHead-&#62;Next-&#62;Data; //! &#60;&#60;&#60; Вот тут ошибка, и у тебя ровно такая же.</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821684</guid>
        <pubDate>Fri, 21 Feb 2020 06:06:10 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821684</link>
        <description><![CDATA[OpenGL: <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821654'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T17:06:24+00:00">20.02.20, 17:06</time></span><div class='quote '>А нафига? У меня же тривиальнейший случай.</div></div><br>
Собственно, чтд - ты просто не читаешь, что тебе пишут  :yes:  &quot;Нафига&quot; и я, и Киля, и <strong class='tag-b'>Qraizer</strong> объясняли уже несколько раз.<br>
Да и &quot;тривиальнейший случай&quot;, который разбирается тут уже пять страниц (три, если вычесть срач) это отдельный прикол. Сам-то не видишь тут противоречия?  :jokingly: </div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821682'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T03:35:36+00:00">21.02.20, 03:35</time></span><div class='quote '>Может из стека снимать ноду нужно как-то иначе? А-ля в стиле std::move?</div></div><br>
Нет. Все эти compare_exchange и прочие атомарные операции в силу своей природы работают только с выровненными данными, и размер этих данных у тебя не будет больше 8 байт, так что мувить атомарно у тебя получится только указатели. Возможно, это означает, что его можно заставить работать с каким-нибудь unique_ptr (без кастомного deleter-а, разумеется), но на практике я не слышал, чтобы так делали, поэтому просто работают с голыми указателями и обеспечивают невозможность их утечки исключительно внимательной медитацией над кодом.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821682</guid>
        <pubDate>Fri, 21 Feb 2020 03:35:36 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821682</link>
        <description><![CDATA[JoeUser: И нахрена тогда std::shared_ptr раз память все равно течет? Вопросов больше чем ответов.<br>Может из стека снимать ноду нужно как-то иначе? А-ля в стиле std::move?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821666</guid>
        <pubDate>Thu, 20 Feb 2020 18:40:02 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821666</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>Wound</strong>, <strong class='tag-b'>Qraizer</strong>, косяк с утечкой всеж был. <br>
И <strong class='tag-b'>Киля</strong>, спасибо за наводку&#33;<br>
<br>
Я зачекал, изменил вот так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">struct Node {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::shared_ptr&#60;T&#62; Data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Node* Next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Node(T const&amp; iData): &nbsp; Data(std::make_shared&#60;T&#62;(iData)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Node start&quot; &#60;&#60; std:: endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;~Node() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Node stop&quot; &#60;&#60; std:: endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div></ol></div></div></div></div><br>
Освобождений не было. Изменил код:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">class FreeStack {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::atomic&#60;Node&#60;T&#62;*&#62; Head;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Push(T const&amp; iData) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Node&#60;T&#62;* const NewNode = new Node&#60;T&#62;(iData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NewNode-&#62;Next = Head.load();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (!Head.compare_exchange_weak(NewNode-&#62;Next, NewNode));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::shared_ptr&#60;T&#62; Pop() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Node&#60;T&#62;* OldHead = Head.load();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (OldHead &amp;&amp; !Head.compare_exchange_weak(OldHead, OldHead-&#62;Next));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (OldHead) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;auto Ret = OldHead-&#62;Data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete OldHead; // &#60;---------------------- тут</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Ret;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return std::shared_ptr&#60;T&#62;();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">};</div></ol></div></div></div></div><br>
А вот теперь все ровно&#33; Что выделяется, то потом и освобождается. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T18:43:31+00:00">20.02.20, 18:43</time></span></span><br>
Хотя, странно  :-? push() и pop() я взял из книжки чисто почти копипастой.<br>
Неужели не проверяют, что пишут ... <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T19:19:32+00:00">20.02.20, 19:19</time></span></span><br>
И кстати, да - вопрос к автору книжки, этому Уильямсу ... Если есть такой <br>
жесткий косяк с утечкой памяти, то что остального полезного можно получить<br>
из раздела о lock-free структурах, кроме как упоминания полезного метода <br>
std::atomic::compare_exchange_weak?<br>
<br>
 :-?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821665</guid>
        <pubDate>Thu, 20 Feb 2020 18:27:17 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821665</link>
        <description><![CDATA[Qraizer: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::shared_ptr&#60;T&#62; Data;</div><div class="code_line">&nbsp;</div><div class="code_line">Node(T const&amp; iData): Data(std::make_shared&#60;T&#62;(iData)) {  }</div><div class="code_line">&nbsp;</div><div class="code_line">Node&#60;T&#62;* const NewNode = new Node&#60;T&#62;(iData);</div></ol></div></div></div></div>new выделяет память и конструирует на ней iData. Если что-то пойдёт не так, память освободится. Что может пойти не так? Конструктор Node&lt;T&gt; делает make_shared, который потенциально выделяет память, т.к. конструирует shared_ptr&lt;&gt;. Если что-то пойдёт не так, в частности из-за конструктора копии T aka iData, это проблемы make_shared(), чтобы не допустить утечек. По-любому это будет конструктор Node&lt;T&gt;, так что мимо внимания new сие не пройдёт. Конструктор копии shared_ptr имеет атрибут nothrow, и тем более его имеет перемещающий конструктор, который будет задействован в твоём случае. Что не удивительно ни разу, но убедиться было не лишним.<br>
При неуспешном создании NewNode все проблемы локализованы внутри new. После успешного создания NewNode остальные операции nothrow. Откуда утечки? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T18:36:05+00:00">20.02.20, 18:36</time></span></span><br>
Ещё мне не нравится, что твой Pop() может вернуть ошибку посредством пустого shared_ptr. Придётся везде проверки пихать. Но с фрилуком иначе, боюсь, и не получится. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T18:38:28+00:00">20.02.20, 18:38</time></span></span><br>
P.S.<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821665'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T18:27:17+00:00">20.02.20, 18:27</time></span><div class='quote '>Откуда утечки?</div></div>Если там намёк на отсутствие деструктора у стека, то это уже другой вопрос.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821663</guid>
        <pubDate>Thu, 20 Feb 2020 18:23:14 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821663</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821652'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T16:43:29+00:00">20.02.20, 16:43</time></span><div class='quote '>Вон пришел Qraizer, без лишних словоблудий нашел и показал косяк (с инициализацией).<br>
Вот такое я читать умею и люблю. </div></div><br>
Угу, конечно, я тебе на этот косяк указал еще раньше. Но ты почему то начал обвинять меня в том, что я строю из себя шибко умного. :-?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821662</guid>
        <pubDate>Thu, 20 Feb 2020 18:10:29 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821662</link>
        <description><![CDATA[Qraizer: А на что тогда, по-твоему, std::shared_ptr&lt;&gt; нужен? Накой кому нужен просто абстрактный счётчик копий? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T18:15:00+00:00">20.02.20, 18:15</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821651'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T16:36:56+00:00">20.02.20, 16:36</time></span><div class='quote '>Вот. То что я просил. Согласен и исправлю. Но пока не понял почему эта переменная инициализируется нулями. За все попытки запуска ни разу не сбойнуло. Странно.</div></div>Ну, тебе на это ещё <strong class='tag-b'>Wound</strong> указал до меня. А так-то атомики без явной инициализации <a class='tag-url' href='https://en.cppreference.com/w/cpp/atomic/atomic/atomic' target='_blank'>инитятся дефолтом</a>, т.е. никак.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821654</guid>
        <pubDate>Thu, 20 Feb 2020 17:06:24 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821654</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821650'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T16:35:01+00:00">20.02.20, 16:35</time></span><div class='quote '>Спросил только, почему не взял/скопипастил известную lock-free библиотеку (мало ли, вдруг не знает её)</div></div><br>
А нафига? У меня же тривиальнейший случай.<br>
<br>
Кстати, на счет советов с мьютексами для моего случая - я это воспринимаю примерно так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">if (а == 1) {</div><div class="code_line">&nbsp;&nbsp;// на всякий случай, чтобы уж точно</div><div class="code_line">&nbsp;&nbsp;if (а == 1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;b=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
Можно и так. Только зачем. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T17:27:20+00:00">20.02.20, 17:27</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821632'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T13:00:48+00:00">20.02.20, 13:00</time></span><div class='quote '>И где этот хваленный RAII ?</div></div><br>
Хваленого RAII нет, но за место возможной утечки - сенкс. Действительно, часть кода не моя, <br>
с книжки. И у меня тоже возник вопрос - new есть, а delete нету. Разве только что это не <br>
обеспечивается std::shared_ptr :-?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821653</guid>
        <pubDate>Thu, 20 Feb 2020 16:48:57 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821653</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821642'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T14:22:59+00:00">20.02.20, 14:22</time></span><div class='quote '>А теперь у тебя двусвязный список.</div></div><br>
Это я понимаю&#33; Есть структуры (мой случай), когда free-lock реализуется просто и на ура. А есть структуры, тот же двусвязный список, где это реализовать невозможно или крайне затруднительно. В моем вопросе - мне просто повезло.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821652</guid>
        <pubDate>Thu, 20 Feb 2020 16:43:29 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821652</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821650'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T16:35:01+00:00">20.02.20, 16:35</time></span><div class='quote '>неумения читать чужие аргументы</div></div><br>
Или не умение их писать? <br>
Вон пришел <strong class='tag-b'>Qraizer</strong>, без лишних словоблудий нашел и показал косяк (с инициализацией). <br>
Вот такое я читать умею и люблю.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821651</guid>
        <pubDate>Thu, 20 Feb 2020 16:36:56 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821651</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821629'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T12:46:22+00:00">20.02.20, 12:46</time></span><div class='quote '>Как минимум не инициализировал FreeStack::Head.</div></div><br>
Вот. То что я просил. Согласен и исправлю. Но пока не понял почему эта переменная инициализируется нулями. За все попытки запуска ни разу не сбойнуло. Странно.  :-? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821627'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:43:49+00:00">20.02.20, 11:43</time></span><div class='quote '>Вставил 2 карт-ридера и скопировал с одной карты на другую.</div></div><br>
Ну это явно не мой вариант&#33; У меня читаются только карточки с магнитной полосой, вмещающие сотни байт, даже не килобайты. Это примерно тоже самое, если к компу подключить вторую клавиатуру. Можно. Только бессмысленно. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821629'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T12:46:22+00:00">20.02.20, 12:46</time></span><div class='quote '>Неперехваченное исключение прибьёт всё приложение. Если это не устраивает, то нужно как-то хендлить.</div></div><br>
Скорее всего так и есть. По идее любой new нужно оборачивать в try-catch (а вдруг памяти не хватит), но на практике мало кто это делает. В моем реальном (не синтетическом) случае тож скорее всего исключений не будет, я не вижу где.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821629'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T12:46:22+00:00">20.02.20, 12:46</time></span><div class='quote '>Юзеру с головой достаточно 100мс реакции</div></div><br>
Я примерно тоже к такой цифре склоняюсь, хотя буду пользовать скорее всего 50мс. Посмотрел по диспетчеру задач - загрузка CPU прогой при 100 и 50 практически равная - доли процента.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821650</guid>
        <pubDate>Thu, 20 Feb 2020 16:35:01 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821650</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821648'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T15:39:21+00:00">20.02.20, 15:39</time></span><div class='quote '>Это его дело.</div></div><br>
Я с этим и не спорил изначально. Спросил только, почему не взял/скопипастил известную lock-free библиотеку (мало ли, вдруг не знает её), а с ТЗ и выбранным способом решения пусть сам разбирается. Кто я, в конце-концов, такой, чтобы мешать усложнить ТС себе жизнь? :D Но вот это:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821600'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:16:41+00:00">20.02.20, 09:16</time></span><div class='quote '>Вот пошла тема&#33;&#33;&#33; Рациональность. Прекрасненько. Тут есть о чем поговорить. Расскажи мне, пожалуйста, как сделать рациональнее&#33;</div></div><br>
по-моему явно сказало о том, что ТС и о разумности подхода поспорить хочет. Так что всё произошедшее тут это исключительно следствие неумения читать чужие аргументы.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821648</guid>
        <pubDate>Thu, 20 Feb 2020 15:39:21 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821648</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821646'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T14:58:20+00:00">20.02.20, 14:58</time></span><div class='quote '> Речь о том, что ТС предпочёл сложное решение простому при отсутствии хоть каких-либо предпосылок к тому, что сложное окажется эффективнее. Это примерно как писать сортировку вставками, не произведя замеры и не убедившись, что std::sort в данном случае окажется хуже.</div></div>Это его дело. Давайте не будем, как любят цитировать по поводу русских форумов, отвечать человеку на не заданные вопросы. Мне понадобился всего абзац чётких фактов вместо трёх страниц вокруг да около, дальше пусть решает сам. И кстати, задача у него действительно пока проста – управление одной переменной.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821647</guid>
        <pubDate>Thu, 20 Feb 2020 15:12:10 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821647</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821642'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T14:22:59+00:00">20.02.20, 14:22</time></span><div class='quote '>Да. Если new или даже new[], успешно распределили память, но в конструкторе одного из объектов произошёл бадабум, то все уже сконструированные объекты, как и положено, удаляются и выделенная new или new[] память освобождается.</div></div><br>
Вообще-то в его коде другая ситуация. Не та о которой говоришь ты.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821646</guid>
        <pubDate>Thu, 20 Feb 2020 14:58:20 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821646</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821638'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T13:56:36+00:00">20.02.20, 13:56</time></span><div class='quote '>Я тоже, к примеру, не буду оборачивать в смарт какой-нибудь поинтер на что-либо, который всего лишь нужно передать куда-то в legacy API как константу.</div></div><br>
Я не понял, к чему этот пример. Речь о том, что ТС предпочёл сложное решение простому при отсутствии хоть каких-либо предпосылок к тому, что сложное окажется эффективнее. Это примерно как писать сортировку вставками, не произведя замеры и не убедившись, что std::sort в данном случае окажется хуже.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821642</guid>
        <pubDate>Thu, 20 Feb 2020 14:22:59 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821642</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>JoeUser</strong>, фрилок очень занятная и полезная штука. Но ты должен понимать, что оно лишь обеспечивает целостность тривиальных операций языка, но никак ничего не охраняет от коллизий. Именно поэтому и придуманы были объекты синхронизации, чтобы будучи реализованными на фрилуках где-то глубоко в своём ядре, дать тебе возможность писать защищённый от коллизий код произвольной сложности. Без них ты сам должен это делать. Захватывать объект, для чего использовать спинлук, и в итоге собрать свой собственный объект. Тот самый, использования которого хотел избежать. Вот у тебя и спрашивают, а зачем оно тебе? <span class="tag-color tag-color-named" data-value="gray" style="color: gray">Непонятно только, почему таким заумным способом спрашивают.</span> Очень редко бывает, когда достаточно просто атомарно сделать что-то тривиальное. Ну вот у тебя это манипуляция Next, например. Ну ок. А теперь у тебя двусвязный список. А у него два поинтера. Ну-ка представь себе атомарное изменение двух поинтеров. Как ты себе это представишь иначе, кроме как булевый флаг, который спинится на &quot;занят&quot;/&quot;свободен&quot; и под &quot;занят&quot; менять, причём уже без всяких атомиков (хотя и с барьерами). И чем тебе этот флаг не мьютекс тогда? Представь теперь что тебе не надо менять, а надо просто пройти по этому списку. Без подобного булевого флага обойдёшься? Точно? Уверен?<br>
Использование принципов фрилок сродни &quot;я сам всё знаю и за всем слежу&quot;. Есть любители нативных поинтеров или там ручного управления ресурсами. В ряде случаев оно даже бывает оправдано. Главное тут – чуять грань. Попробуй вместо одной нитки у себя в примере завести несколько. Почувствуй т.с. руками, каково это.<br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T14:26:13+00:00">20.02.20, 14:26</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821641'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T14:14:41+00:00">20.02.20, 14:14</time></span><div class='quote '>И когда это new - гарантировал отсуствие утечек? Память он выделил, а дальше в методе вылазиит исключение - и что это гарантирует отсуствие утечек памяти?</div></div>Да. Если new или даже new[], успешно распределили память, но в конструкторе одного из объектов произошёл бадабум, то все уже сконструированные объекты, как и положено, удаляются и выделенная new или new[] память освобождается.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821641</guid>
        <pubDate>Thu, 20 Feb 2020 14:14:41 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821641</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821638'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T13:56:36+00:00">20.02.20, 13:56</time></span><div class='quote '>Создание объекта new гарантирует отсутствие утечек. Операции с атомиками там бессбойные. Операции с сырым поинтером бессбойные. Проблем не ожидается.</div></div><br>
Сбойные, как минимум в Pop методе, в указателе может быть мусор, из за чего полетит AV при вызове -  OldHead&gt;Next <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T14:15:56+00:00">20.02.20, 14:15</time></span></span><br>
И когда это new - гарантировал отсуствие утечек? Память он выделил, а дальше в методе вылазиит исключение - и что это гарантирует отсуствие утечек памяти? В С++ GC завезли или я что то пропустил?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821638</guid>
        <pubDate>Thu, 20 Feb 2020 13:56:36 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821638</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821606'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:58:22+00:00">20.02.20, 09:58</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821605'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:43:16+00:00">20.02.20, 09:43</time></span><div class='quote '>Мусье, а вы бы мне могли обосновать необходимость блокировки, где и без нее можно обойтись?</div></div><br>
Звучит примерно как &quot;обоснуй необходимость компилятора, ведь можно в hex кодах всё написать&quot;. Можно, конечно, просто это сложно. lock free алгоритмы в разы более сложные в написании и отладке, да ещё и далеко не всегда они работают быстрее (по-моему очередь и стек так вообще часто медленней оказываются, чем с блокировкой), так что в данном случае всё наоборот - ты должен обосновать необходимость реализовывать с lock-free. У тебя есть замеры времени в реальных условиях, из которых следует, что ты много времени тратишь на на ожидания в мьютексах? Или может быть твоя основная цель это научиться работать с lock-free? Если ответа на оба вопроса &quot;нет&quot;, то твоё решение менее рационально, чем решение с блокировками.</div></div><br>
Нет. Я тоже, к примеру, не буду оборачивать в смарт какой-нибудь поинтер на что-либо, который всего лишь нужно передать куда-то в legacy API как константу. Если что-то можно сделать просто, это нужно делать просто. В hex набирать программу всегда непросто... хотя бывают гурманы. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T13:55:12+00:00">20.02.20, 13:55</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821632'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T13:00:48+00:00">20.02.20, 13:00</time></span><div class='quote '><strong class='tag-b'>OpenGL</strong>, ты мне помнится доказывал что в С++ утечек нет. Узри:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821628'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T12:29:26+00:00">20.02.20, 12:29</time></span><div class='quote '>Node&lt;T&gt;* const NewNode = new Node&lt;T&gt;(iData); //&#33; &lt;&lt;&lt; Выделение памяти</div></div><br>
И где этот хваленный RAII ? И вот такого кода тонны по всюду. <br>
У него в Попе стэка или в том же пуше, после выделения памяти произойдет исключение - и утечка ресурса гарантирована.</div></div><br>
Создание объекта new гарантирует отсутствие утечек. Операции с атомиками там бессбойные. Операции с сырым поинтером бессбойные. Проблем не ожидается.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821634</guid>
        <pubDate>Thu, 20 Feb 2020 13:07:21 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821634</link>
        <description><![CDATA[Qraizer: А пока людям, которые думают, что классический подход к многопоточности устарел, предлагаю просветиться <a class='tag-url' href='https://habr.com/ru/post/466337/' target='_blank'>вот тут</a>. Очень занятное чтиво. Будет чем пока заняться.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821632</guid>
        <pubDate>Thu, 20 Feb 2020 13:00:48 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821632</link>
        <description><![CDATA[Wound: <strong class='tag-b'>OpenGL</strong>, ты мне помнится доказывал что в С++ утечек нет. Узри:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821628'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T12:29:26+00:00">20.02.20, 12:29</time></span><div class='quote '>Node&lt;T&gt;* const NewNode = new Node&lt;T&gt;(iData); //&#33; &lt;&lt;&lt; Выделение памяти</div></div><br>
И где этот хваленный RAII ? И вот такого кода тонны по всюду. <br>
У него в Попе стэка или в том же пуше, после выделения памяти произойдет исключение - и утечка ресурса гарантирована.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821631</guid>
        <pubDate>Thu, 20 Feb 2020 12:49:08 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821631</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821541'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T22:35:33+00:00">19.02.20, 22:35</time></span><div class='quote '>По поводу QT проблемы с глобальными сиглтонами из-за параллельной сборки он в исполняемые файлы пихает несколько штук. Пришлось через разделяемую память делать свой синглтон и на основе него мьютексы для блокировок.</div></div><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821544'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T01:22:32+00:00">20.02.20, 01:22</time></span><div class='quote '>Я вам рассказал про подводные камни. А что с ними делать это вам решать.</div></div>Этих фраз даже я не понял. Набор слов. <strong class='tag-b'>Pavia</strong>, попрошу быть конкретнее, чтобы тебя можно было понимать по-русски. Так что, увы, не рассказал.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821630</guid>
        <pubDate>Thu, 20 Feb 2020 12:48:48 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821630</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821621'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:27:27+00:00">20.02.20, 11:27</time></span><div class='quote '>а стараюсь оперативно решать текущие вопросы.</div></div><br>
Выдать сложный алгоритм вместо простого без малейших обоснований того, что простой будет работать так же эффективно это что угодно, но не &quot;оперативное решение текущих вопросов&quot;.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821629</guid>
        <pubDate>Thu, 20 Feb 2020 12:46:22 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821629</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821499'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:58:31+00:00">19.02.20, 13:58</time></span><div class='quote '>1) Где какие ошибки я допустил?</div></div>Как минимум не инициализировал FreeStack::Head.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821499'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:58:31+00:00">19.02.20, 13:58</time></span><div class='quote '>2) В каких местах имеет смысл ловить и обрабатывать исключения?</div></div>Не надо. Слишком простой пример. В целом если, конечно любую стартовую функцию потока нужно рассматривать наравне с main(). У тебя это WriterThread::operator()(). Неперехваченное исключение прибьёт всё приложение. Если это не устраивает, то нужно как-то хендлить.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821499'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:58:31+00:00">19.02.20, 13:58</time></span><div class='quote '>3) По скольку отдельная нить не заточена на вычисления, а скорее на ожидания - какой интервал опроса имеет смысл оставить, чтобы попусту не грузить систему?</div></div>Ну блин. Кто ж помимо тебя на это ответит-то? Зависит от задачи. Юзеру с головой достаточно 100мс реакции, процессам реального времени и 1мс может оказаться много.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821628</guid>
        <pubDate>Thu, 20 Feb 2020 12:29:26 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821628</link>
        <description><![CDATA[Wound: Добрался до компа, давай еще раз:<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821617'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:15:29+00:00">20.02.20, 11:15</time></span><div class='quote '>Если стек не пуст - pop() вернет последний OldHead-&gt;Data или пустой std::shared_ptr&lt;T&gt;(), если стек пуст;</div></div><br>
Причем тут что вернет pop?<br>
Я спрашивал:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821613'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:58:04+00:00">20.02.20, 10:58</time></span><div class='quote '>Чему будет равно значение переменной OldHead в Pop&#39;e если стек пустой?</div></div><br>
<br>
Теперь на пальцах:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">class FreeStack {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::atomic&#60;Node&#60;T&#62;*&#62; Head; //! &#60;&#60;&#60; Голый указатель обернутый в std::atomic</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Push(T const&amp; iData) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Node&#60;T&#62;* const NewNode = new Node&#60;T&#62;(iData); //! &#60;&#60;&#60; Выделение памяти</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;NewNode-&#62;Next = Head.load(); //! &#60;&#60;&#60;&#60; Что тут вернет load, если стек пустой???? nullptr ??? Ты уверен в этом? :D </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;while (!Head.compare_exchange_weak(NewNode-&#62;Next, NewNode));</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::shared_ptr&#60;T&#62; Pop() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Node&#60;T&#62;* OldHead = Head.load(); //! &#60;&#60;&#60;&#60; Что тут вернет load, если стек пустой ???? nullptr ??? Ты уверен в этом? :D </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;while (OldHead &amp;&amp; !Head.compare_exchange_weak(OldHead, OldHead-&#62;Next)); //! &nbsp;&#60;&#60;&#60; Тут идет проверка что если OldHead не nullptr - что то сделать, </div><div class="code_line">//! в частности если память для OldHead выделена не была(а вызов pop легко может быть вызвон до push), и при этом OldHead не равен nullptr, Грохнется вот тут -&#62; OldHead-&#62;Next &#60;&#60;&#60; Access Violation</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return OldHead ? OldHead-&#62;Data : std::shared_ptr&#60;T&#62;();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div></ol></div></div></div></div><br>
Так понятнее ? <br>
<br>
Я лично не вижу нигде в этом коде где бы Head&#39;у или NewNode-&gt;Next&#39;у выставлялся nullptr. Или по стандарту неинициализированные указатели у нас всегда равны nullptr? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T12:41:39+00:00">20.02.20, 12:41</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821624'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:33:31+00:00">20.02.20, 11:33</time></span><div class='quote '>Но, по-моему, ты считаешь себя умнее Энтони Уильямса.<br>
При всем моем уважении к тебе - я уверен, ты себя<br>
переоцениваешь.</div></div><br>
Речь идет о твоем коде вообще то, а про Энтони Уильямса.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821627</guid>
        <pubDate>Thu, 20 Feb 2020 11:43:49 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821627</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821621'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:27:27+00:00">20.02.20, 11:27</time></span><div class='quote '>Но по теме ... не представляю, зачем на компе 2 и более одинаковых кард-считывателя. У меня моск разрушается&#33;</div></div><br>
Это легко &#33;<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><br>
Очень люблю почитать.<br>
У меня в электронной книге стоит карточка с личной подборкой - очень много<br>
уже, гигабайт 10 скопилось.<br>
Понадобилось/захотелось сбросить копию на другую карточку.<br>
Вставил 2 карт-ридера и скопировал с одной карты на другую.<br>
</div></div>]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821626</guid>
        <pubDate>Thu, 20 Feb 2020 11:42:05 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821626</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821624'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:33:31+00:00">20.02.20, 11:33</time></span><div class='quote '>Это метод std::atomic ващето&#33; Ты чего там? ку-ку??</div></div><br>
Да неужели. Перечитай ещё раз мой пост выше. Я даже тебе комментарии к проблемным участкам написал]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821624</guid>
        <pubDate>Thu, 20 Feb 2020 11:33:31 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821624</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821623'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:30:22+00:00">20.02.20, 11:30</time></span><div class='quote '>Давно у shared_ptr метод load появился?</div></div><br>
Это метод std::atomic ващето&#33;<span class="tag-color tag-color-named" data-value="red" style="color: red">censored</span><br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T11:38:22+00:00">20.02.20, 11:38</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821623'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:30:22+00:00">20.02.20, 11:30</time></span><div class='quote '>Тебе только кажется что оно работает.</div></div><br>
Ну  запили тесты, я прогоню все что скажешь.<br>
<br>
Но, по-моему, ты считаешь себя умнее Энтони Уильямса.<br>
При всем моем уважении к тебе - я уверен, ты себя<br>
переоцениваешь.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821623</guid>
        <pubDate>Thu, 20 Feb 2020 11:30:22 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821623</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821617'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:15:29+00:00">20.02.20, 11:15</time></span><div class='quote '>Если стек не пуст - pop() вернет последний OldHead-&gt;Data или пустой std::shared_ptr&lt;T&gt;(), если стек пуст;</div></div><br>
Давно у shared_ptr метод load появился?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821617'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:15:29+00:00">20.02.20, 11:15</time></span><div class='quote '>.е я как-то написал, он работает, и я не разобрался, и ты кросава? <br>
Зашибись логика&#33; </div></div><br>
Тебе только кажется что оно работает.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821621</guid>
        <pubDate>Thu, 20 Feb 2020 11:27:27 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821621</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>ЫукпШ</strong>, у меня лишь одно оправдание - я не стараюсь предугадывать будущее, а стараюсь оперативно решать текущие вопросы. И решать максимально быстро. Другой вопрос &quot;а качественно ли?&quot;. Стараюсь качественно. Но приоритет - сроки, потом качество. И да, грешен, иногда приходится говнокодить.<br>
<br>
Но по теме ... не представляю, зачем на компе 2 и более одинаковых кард-считывателя. У меня моск разрушается&#33;]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821620</guid>
        <pubDate>Thu, 20 Feb 2020 11:20:00 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821620</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821617'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:15:29+00:00">20.02.20, 11:15</time></span><div class='quote '><div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821616'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:00:13+00:00">20.02.20, 11:00</time></span><div class='quote '>Завтра к тебе придут и скажут:</div></div><br>
Это вообще оффтоп. Но не скажут - щя получилось так, я являюсь и Заказчиком И Исполнителем.</div></div></div></div><br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><br>
...<br>
На предварительном следствии в полицейском участке на все вопросы он вопил одну и ту же стереотипную фразу:<br>
— У меня писчебумажный магазин&#33;<br>
На что получал такой же стереотипный ответ:<br>
— Это для вас не оправдание. <br>
...<br>
</div></div>]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821617</guid>
        <pubDate>Thu, 20 Feb 2020 11:15:29 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821617</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821613'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:58:04+00:00">20.02.20, 10:58</time></span><div class='quote '>Чему будет равно значение переменной OldHead в Pop&#39;e если стек пустой?</div></div><br>
Если стек не пуст - pop() вернет последний OldHead-&gt;Data или пустой std::shared_ptr&lt;T&gt;(), если стек пуст;<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821613'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:58:04+00:00">20.02.20, 10:58</time></span><div class='quote '>Конечно сложен, ты в нем сам даже толком не разобрался</div></div><br>
Т.е я как-то  написал, он работает, и я не разобрался, и ты кросава?  :lol: <br>
Зашибись логика&#33; :jokingly: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T11:17:17+00:00">20.02.20, 11:17</time></span></span><br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821616'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:00:13+00:00">20.02.20, 11:00</time></span><div class='quote '>Завтра к тебе придут и скажут:</div></div><br>
Это вообще оффтоп. Но не скажут - щя получилось так, я являюсь и Заказчиком И Исполнителем.</div></div>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821616</guid>
        <pubDate>Thu, 20 Feb 2020 11:00:13 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821616</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821614'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:58:30+00:00">20.02.20, 10:58</time></span><div class='quote '>Возникает вопрос, зачем мне все выше прочитанное?</div></div><br>
Всё просто.<br>
Если возникает такой вопрос, значит и читать не надо. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T11:03:13+00:00">20.02.20, 11:03</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821614'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:58:30+00:00">20.02.20, 10:58</time></span><div class='quote '>А моя цель проста, никаких библиотечных реализаций, все - тупо для проекта.<br>
Никаких &quot;расширений&quot; - только 2 потока, строго 2 потока.</div></div><br>
Это только кажется.<br>
Завтра к тебе придут и скажут:<br>
- Ты так классно сделал работу &#33; <br>
Нам понравилось, делай ещё много таких проектов, хороших и нужных.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821614</guid>
        <pubDate>Thu, 20 Feb 2020 10:58:30 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821614</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>ЫукпШ</strong>, конечно большое спасибо за ответ&#33;<br>
Но, увы, слишком много букв, слишком много ненужных возможностей.<br>
А моя цель проста, никаких библиотечных реализаций, все - тупо для проекта.<br>
Никаких &quot;расширений&quot; - только 2 потока, строго 2 потока.<br>
<br>
Возникает вопрос, зачем мне все выше прочитанное?<br>
Возникает второй вопрос, а был ли прочтен вместе с кодом заданный вопрос с первом сообщении?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821613</guid>
        <pubDate>Thu, 20 Feb 2020 10:58:04 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821613</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821609'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:27:44+00:00">20.02.20, 10:27</time></span><div class='quote '>Что мой FreeStack так серьезно сложен? Да ладно? Да ладно&#33;</div></div><br>
Конечно сложен, ты в нем сам даже толком не разобрался  :lol: <br>
Допустим на вскидку:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void Push(T const&amp; iData) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Node&#60;T&#62;* const NewNode = new Node&#60;T&#62;(iData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;NewNode-&#62;Next = Head.load();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;while (!Head.compare_exchange_weak(NewNode-&#62;Next, NewNode));</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::shared_ptr&#60;T&#62; Pop() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Node&#60;T&#62;* OldHead = Head.load();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;while (OldHead &amp;&amp; !Head.compare_exchange_weak(OldHead, OldHead-&#62;Next));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return OldHead ? OldHead-&#62;Data : std::shared_ptr&#60;T&#62;();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
Чему будет равно значение переменной OldHead в Pop&#39;e если стек пустой?<br>
Вот тут я имею ввиду:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;Node&#60;T&#62;* OldHead = Head.load(); //! - вот эта шляпа что тебе возвратит, если стек твой пуст?</div><div class="code_line">&nbsp;</div><div class="code_line">while (OldHead &amp;&amp; !Head.compare_exchange_weak(OldHead, OldHead-&#62;Next)); //! А тут что будет, если тебе возвратит отличное от 0 значение?</div></ol></div></div></div></div><br>
Ты с указателями бы разобрался для начала, а уж потом бы lock-free алгоритмы писал.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821612</guid>
        <pubDate>Thu, 20 Feb 2020 10:50:55 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821612</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821609'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:27:44+00:00">20.02.20, 10:27</time></span><div class='quote '>Что мой FreeStack так серьезно сложен? Да ладно? Да ладно&#33;</div></div><br>
Да. Он не сложнее быстрой сортировки, например, но если кто-то будет писать сортировку просто так вместо использования той, что в стандартной библиотеке, мотивируя это тем, что она несложная, то это кто-то просто решает задачу нерационально. Как и ты сейчас.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821611</guid>
        <pubDate>Thu, 20 Feb 2020 10:49:15 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821611</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821600'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:16:41+00:00">20.02.20, 09:16</time></span><div class='quote '>Вводная: есть GUI процесс, есть процесс, опрашивающий Кардридер в неблокирующем режиме.<br>
В моем синтетическом примере основной процесс = ReaderThread, а процесс опроса Кардридера WriteThread.<br>
<br>
Жду более &quot;оптимальный&quot; вариант и конечно же его обоснование&#33;</div></div><br>
Не хотелось бы встревать в жёсткую дискуссию..что-то я устал<br>
за последнее время.<br>
Могу просто рассказать, как делал сам.<br>
А в качестве обоснования могу привести наисерьёзнейший аргумент:<br>
&quot;Нутром чую, что правильно - именно так&quot;.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><br>
Итак, есть GUI - приложение с его оконной процедурой.<br>
Есть рабочий поток (или потоки) которые что-то там много делают.<br>
Пусть будет карт-ридер, это неважно. Хоть 10.<br>
<br>
1. Смастерим класс-коммуникационный объект, для работы и обмена между<br>
разными потоками. Это будет шаблонный класс.<br>
Его основа - две потоко-безопасные очереди. Разного направления,<br>
условно &quot;туда и обратно&quot;. Где хочешь их бери, хоть сам луди.<br>
(а что такое очередь? Это массив, индексы которого рассчитываются по алгоритму очереди)<br>
<br>
2. Напишем класс-интерфейс для возбуждения событий.<br>
Назовём его, например, I_RiseEvent. У него будет роутина RiseEvent, которая будет<br>
реализовываться в дочерних классах.<br>
<br>
3. Класс нашего главного окна (или любого другого, которого надо)<br>
назначим наследником - того библиотечного класса окна и интерфейса I_RiseEvent.<br>
Множественным наследованием.<br>
<br>
4. Тоже самое с нашим рабочим потоком - он наследник базового класса - потока и I_RiseEvent.<br>
<br>
5. Инициализация комм-объекта произойдёт после создания объекта рабочего потока и окна.<br>
Дело в том, что объекту коммуникации надо обязательно передать указатели на объекты-интерфейсы<br>
потока и окна. Идея тут простая - когда один из участников обмена засылает<br>
структуру обмена в очередь, автоматически возбуждается событие на принимающей стороне.<br>
А поскольку интерфейс - абстрактен, и реализация возбуждения события происходит<br>
в конкретном объекте конкретного класса проекта, значит наш коммуникационный объект<br>
от проекта вообще не зависит. Это прекрасно, и мы можем включить такой класс<br>
в библиотеку и пользоваться проверенным решением во всех проектах.<br>
Поскольку наш коммуникационный объект (и используемые им очереди) мы сделаем<br>
шаблонным классом. А значит, пригодным для работы с любыми типами данных.<br>
<br>
6. как всё работает - допустим юзер щёлкнул по кнопке - обработчик кнопки заполнил<br>
структуру с запросом, занёс её в коммуникационный объект в направлении &quot;туда&quot;.<br>
Сам факт занесения вызвал процедуру &quot;RiseEvent&quot; у объекта-потока.<br>
Эта процедура подожгла семафор.<br>
Семафор разбудил поток, который мирно спал на Wait-процедуре.<br>
Поток запустил обработчик работы/опроса чего надо. Допустим, карт-ридера.<br>
Через некоторое время (а главному окну всё это пофигу) операция завершилась.<br>
Как-то. Обработчик потока записал результаты в какую-то там (заранее изобретённую) <br>
структуру и заслал в коммуникационный объект в очередь &quot;обратно&quot;. Сам факт записи в очередь<br>
вызвал процедуру &quot;RisEvent&quot; уже главного окна. Чтобы не работать в контексте<br>
рабочего потока, окно пошлёт само себе асинхронное, заранее предусмотренное <br>
сообщение.<br>
Получив сообщение, обработчик окна этого сообщения извлечёт из очереди структуру<br>
с результатом... и у юзера в строке статуса (например) появится сообщение -<br>
&quot;Операция такая-то завершилась успешно&quot;<br>
<br>
<br>
В одном приложении может быть сколько надо потоков и сколько угодно таких связей между ними.<br>
При этом один поток может получать разные запросы от разных коммуникационных<br>
объектов и выполнять последовательно разную работу разными обработчиками.<br>
Ограничение одно - любой поток в среднем должен справляться с поставленными<br>
задачами, чтобы очереди запросов не стали неконтролируемо расти.<br>
<br>
Можно также организовать последовательный конвейер между многими потоками,<br>
каждый из которых производит свою часть работы по преобразованию данных.<br>
<br>
Привожу пример - получаем по сети данные и строим график.<br>
1-й рабочий поток непосредственно работает с сетью, получает данные,<br>
проверяет, преобразовывает, засылает в комм-объект, засыпает.<br>
2-й рабочий поток-графопостроитель. Получает данные 1-го, просыпается, <br>
начинает рисовать, результат засылает в комм-объект (другой уже) засыпает.<br>
3-й поток - главного окна. Возбуждение события приведёт к извлечению картинки<br>
и перерисовке ею главного окна.<br>
Однако, графопостроитель - приёмник запросов не от одного комм-обекта. <br>
Он должен получать данные от главного окна :<br>
- при измерении размеров окна<br>
- при изменении графических параметров - цветА, фонты, вид гафика, их количество итд. <br>
Все, что можно назвать &quot;формой представления&quot;.<br>
И поток-графопостроитель действительно будет выполнять все эти запросы от 3-х источников<br>
последовательно и слать результат одному приёмнику (в виде картинки главному потоку).<br>
<br>
При этом работа отдельных частей приложения максимально абстрагирована<br>
от других частей приложения. Структура приложения становится полностью асинхронной,<br>
никто-никого-никогда не ждёт.<br>
Свою работу сделал, сунул результат в очередь и всё. <br>
Дальнейшая судьба данных не волнует. <br>
Конвейер.<br>
<br>
Есть конечно и сложности реализации.<br>
Если такой проект будет плохо документирован, то разбираться потом<br>
в многочисленных перекрёстных связях между объектами будет не сразу быстро.<br>
Кроме того, потребуется специально сделанная процедура корректной де-активации<br>
многочисленных связей - иначе умирающие потоки не дадут нормально<br>
завершиться приложению.<br>
<br>
Как-то так.<br>
</div></div>]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821609</guid>
        <pubDate>Thu, 20 Feb 2020 10:27:44 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821609</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821606'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:58:22+00:00">20.02.20, 09:58</time></span><div class='quote '>Разжёвывать очевидную мысль, да ещё оффтопя, мне не интересно.</div></div><br>
Я немного гиперболизирую, несколько в обход вежливому общению. Просто представь, ты пишешь утверждение типа:<br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">censored</span>. <div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body">Вы с <strong class='tag-b'>OpenGL</strong> не поняли друг друга. Это не повод обижаться и раскультуриваться. Я понял каждого, хоть и не с первого раза. Вы оба правы, но говорите о разных предметных областях.</div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821606'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:58:22+00:00">20.02.20, 09:58</time></span><div class='quote '>Звучит примерно как &quot;обоснуй необходимость компилятора, ведь можно в hex кодах всё написать&quot;.</div></div><br>
Что мой FreeStack так серьезно сложен? Да ладно?  Да ладно&#33;<br>
Есть другое мнение. Для компиляции Хэллоу Ворлда не нужно ставить <a class='tag-url' href='https://ru.wikipedia.org/wiki/LCC' target='_blank'>lcc</a> (в 624KB), а нужно ставить вcю студию в более чем 11GB. Зачем?<br>
ДА НА ВСЯКИЙ СЛУЧАЙ &#33;&#33;&#33; Прекрасная логика&#33;<br>
<br>
ПРЕСНАЯ ВОДА ПО ПРЕЖНЕМУ detected&#33;<br>
В первой теме код и вопросы. Это тема.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821606</guid>
        <pubDate>Thu, 20 Feb 2020 09:58:22 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821606</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821605'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:43:16+00:00">20.02.20, 09:43</time></span><div class='quote '>Не понял тебя. Атомарные операции гарантируют &quot;единоличный&quot; доступ/операции. Считывание, обмен... Ты о каком смысле вообще?</div></div><br>
Ну перечитай ещё раз  :-? Разжёвывать очевидную мысль, да ещё оффтопя, мне не интересно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821605'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:43:16+00:00">20.02.20, 09:43</time></span><div class='quote '>Мусье, а вы бы мне могли обосновать необходимость блокировки, где и без нее можно обойтись?</div></div><br>
Звучит примерно как &quot;обоснуй необходимость компилятора, ведь можно в hex кодах всё написать&quot;. Можно, конечно, просто это сложно. lock free алгоритмы в разы более сложные в написании и отладке, да ещё и далеко не всегда они работают быстрее (по-моему очередь и стек так вообще часто медленней оказываются, чем с блокировкой), так что в данном случае всё наоборот - ты должен обосновать необходимость реализовывать с lock-free. У тебя есть замеры времени в реальных условиях, из которых следует, что ты много времени тратишь на на ожидания в мьютексах? Или может быть твоя основная цель это научиться работать с lock-free? Если ответа на оба вопроса &quot;нет&quot;, то твоё решение менее рационально, чем решение с блокировками.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821605</guid>
        <pubDate>Thu, 20 Feb 2020 09:43:16 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821605</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821604'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:31:01+00:00">20.02.20, 09:31</time></span><div class='quote '>Тогда ты просто сам не понял, что сказал, потому что в этом контексте фраза &quot;чтобы инварианты из STL выполнялись.&quot; теряет смысл.</div></div><br>
 :blink:<br>
<br>
Не понял тебя. Атомарные операции гарантируют &quot;единоличный&quot; доступ/операции. Считывание, обмен... Ты о каком смысле вообще?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821604'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:31:01+00:00">20.02.20, 09:31</time></span><div class='quote '>Мсье знает толк, однако. Чем тупое решение с блокировкой не устроило-то?</div></div><br>
Мусье, а вы бы мне могли обосновать необходимость блокировки, где и без нее можно обойтись?<br>
И еще, мусье, вы немножко знакомы с тезисом Уильяма из Оккамы (&quot;<a class='tag-url' href='https://ru.wikipedia.org/wiki/Бритва_Оккама' target='_blank'>Бритва Оккамы</a>&quot;), и если &quot;да&quot;,<br>
спросите себя - нахрена городить огород? Я имею ввиду- блокировками, если и без них все<br>
прекрасно?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821604</guid>
        <pubDate>Thu, 20 Feb 2020 09:31:01 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821604</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821600'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:16:41+00:00">20.02.20, 09:16</time></span><div class='quote '>Я про атомарные операции библиотеки... Они и гарантируют инварианты.</div></div><br>
Тогда ты просто сам не понял, что сказал, потому что в этом контексте фраза &quot;чтобы инварианты из STL выполнялись.&quot; теряет смысл.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821600'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T09:16:41+00:00">20.02.20, 09:16</time></span><div class='quote '>Вводная: есть GUI процесс, есть процесс, опрашивающий Кардридер в неблокирующем режиме.</div></div><br>
У тебя там lock-free контейнеры при межпроцессном взаимодействии? :D Мсье знает толк, однако. Чем тупое решение с блокировкой не устроило-то? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T09:32:00+00:00">20.02.20, 09:32</time></span></span><br>
По-моему тут что-то из разряда &quot;если в руках молоток, то всё кажется гвоздями&quot;]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821600</guid>
        <pubDate>Thu, 20 Feb 2020 09:16:41 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821600</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821594'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:58:16+00:00">20.02.20, 08:58</time></span><div class='quote '>Какие инварианты и как их нарушает решение с блокировкой?</div></div><br>
&quot;Перпендикулярный&quot; вопрос ващето&#33; Я про атомарные операции библиотеки... Они и гарантируют инварианты.<br>
&quot;Решения с блокировкой&quot; - это вами навязываемая шляпа, к которой я в данном треде никакого отношения не имею.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821594'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:58:16+00:00">20.02.20, 08:58</time></span><div class='quote '> Хочешь делать нерационально - дело твоё, мне-то что?</div></div><br>
Вот пошла тема&#33;&#33;&#33; Рациональность. Прекрасненько. Тут есть о чем поговорить. Расскажи мне, пожалуйста, как сделать рациональнее&#33;<br>
Вводная: есть GUI процесс, есть процесс, опрашивающий Кардридер в неблокирующем режиме.<br>
В моем синтетическом примере основной процесс = ReaderThread, а процесс опроса Кардридера WriteThread.<br>
<br>
Жду более &quot;оптимальный&quot; вариант и конечно же его обоснование&#33;]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821594</guid>
        <pubDate>Thu, 20 Feb 2020 08:58:16 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821594</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821588'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:42:44+00:00">20.02.20, 08:42</time></span><div class='quote '> Мне надо чтобы инварианты из STL выполнялись.</div></div><br>
Какие инварианты и как их нарушает решение с блокировкой?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821588'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:42:44+00:00">20.02.20, 08:42</time></span><div class='quote '>Я вас спросил в первом посте - есть ошибки?</div></div><br>
Так я и не спорю. Хочешь делать нерационально - дело твоё, мне-то что?]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821592</guid>
        <pubDate>Thu, 20 Feb 2020 08:56:47 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821592</link>
        <description><![CDATA[JoeUser: Тут интересное по теме - <a class='tag-url' href='https://drive.google.com/open?id=1neBjK6Xs64tbVQoB24aksI_2ku5t4Moc' target='_blank'>Параллельное программирование на С++ в действии.Уильямс</a><br>
В том числе и по lock-free структурам.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821588</guid>
        <pubDate>Thu, 20 Feb 2020 08:42:44 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821588</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821578'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:22:51+00:00">20.02.20, 08:22</time></span><div class='quote '>А так оно и есть. С блокировками у тебя всегда есть части кода, гарантированно выполняющиеся одним потоком. Это банально проще отлаживать и куда быстрее писать, чем сидеть и представлять &quot;а вот тут у меня будет переключение контекста, сюда вклинится другой поток и выполнит воон ту фигню&quot; с lock-free. Так что да, решение с блокировками наверняка окажется надёжнее из-за своей простоты.</div></div><br>
А мне не надо &quot;надежнее надежного&quot;. Мне надо чтобы инварианты из STL выполнялись. И если там есть часть функций/методов которые работают с lock-free структурами, я буду ими пользоваться. Нравится вам это или нет.<br>
<br>
Я вас спросил в первом посте - есть ошибки? А вы меня грузите опасениями&#33;&#33;&#33; Мне этого не надо, я это не просил &#33;&#33;&#33;]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821585</guid>
        <pubDate>Thu, 20 Feb 2020 08:35:27 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821585</link>
        <description><![CDATA[JoeUser: <span class="tag-color tag-color-named" data-value="red" style="color: red">offtop was censored</span><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821572'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:12:34+00:00">20.02.20, 08:12</time></span><div class='quote '>Я тебе уже привел хренову тучу аргументов - отказаться от std::thread, тебе этого мало?</div></div><br>
Прости, я что-то кроме бла-бла-бла не заметил сути. Перечисли, пожалуйста (ПОЖАЛУЙСТА)&#33;&#33;&#33; еще раз по пунктам. Чем тебе плох std::thread?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821572'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:12:34+00:00">20.02.20, 08:12</time></span><div class='quote '>потому что у тебя нет блокировок и гарантировать что эта операция потокобезопасная - нельзя</div></div><br>
Т.е как я тебя понимаю, если в Стандарте написано, что данная операция из текущей версии STL атомарная - тебе насрать?&#33; Ты этому не доверяешь?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821572'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:12:34+00:00">20.02.20, 08:12</time></span><div class='quote '>Ты даже постом выше уже признал что std::cout у тебя не потокобезопасен.</div></div><br>
Не &quot;даже&quot; а &quot;всего лишь&quot; - ощути разницу&#33; А ты из говно-момента делаешь себе корону. Хотя нет, мелочей нет. Ты тут прав. Это есть косяк и он должен быть запомнен на будущее.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821572'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:12:34+00:00">20.02.20, 08:12</time></span><div class='quote '>как Pavia, за то что не привел тебе пруфы</div></div><br>
А вот на зло тебе и ему не выдам&#33;  :lol: Он не просто ограничился &quot;тезисом&quot;, а пытался обосновать. А ты, как всегда, с шашкой на-голо в бой. Нихрена не понял, но по ходу разберемся  :lol: Киля, не парься - ты на форуме есть, и это клёво&#33; Даже если мы стреляемся из разных барикад  :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821578</guid>
        <pubDate>Thu, 20 Feb 2020 08:22:51 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821578</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821571'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:01:26+00:00">20.02.20, 08:01</time></span><div class='quote '>Этот аргумент я себе запишу в смартфон&#33;&#33;&#33;       Это не должно умереть&#33;</div></div><br>
А так оно и есть. С блокировками у тебя всегда есть части кода, гарантированно выполняющиеся одним потоком. Это банально проще отлаживать и куда быстрее писать, чем сидеть и представлять &quot;а вот тут у меня будет переключение контекста, сюда вклинится другой поток и выполнит воон ту фигню&quot; с lock-free. Так что да, решение с блокировками наверняка окажется надёжнее из-за своей простоты.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821572</guid>
        <pubDate>Thu, 20 Feb 2020 08:12:34 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821572</link>
        <description><![CDATA[Wound: <br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">offtop was censored</span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821570'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:59:35+00:00">20.02.20, 07:59</time></span><div class='quote '>Да нет, я желаю на каждый &quot;профессиональный взгляд&quot; иметь кроме бла-бла-бла - что-то подтверждающее. Ну напиши мне строку в моем коде, обоснуй ошибку. Так уже третья моя просьба мимо. Спрашивается, а нахрена твои слова, если по существу не можешь указать где плохо и как лучше? Извини за эмоции.</div></div><br>
Я тебе уже привел хренову тучу аргументов - отказаться от std::thread, тебе этого мало? Так а нахрена ты тут тему вообще создал? Комить уже, ёпта. Все там нормалёк, остальные косяки по мере поступления разрулишь.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821570'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:59:35+00:00">20.02.20, 07:59</time></span><div class='quote '>Бинго&#33; Вот этого ДЖВА года ждал&#33;  А еще надежнее - записывать параллельно в бумажный журнал.</div></div><br>
Конечно надежнее, когда у тебя есть общий ресурс&#33; Потому что все понятно что и где у тебя происходит. Вот тут есть лок - значит ресурс защищен, а вот тут нет лока - значит возможно косяк. В случае с lock-free алгоритмами - косяк тебя может поджидать на каждом шагу, потому что у тебя нет блокировок и гарантировать что эта операция потокобезопасная - нельзя, вернее можно, если углубленно знать всякие ньюансы использования lock-free(но это явно не про тебя). Допустим ты сам не можешь гарантировать что твой код потокобезопасен и не содержит костылей. Банальное переписывание его с блокировками - можно уже гарантировать что код не содержит каких то подводных камней, и что вот в таких то местах - он гарантированно потокобезопасен.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821570'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:59:35+00:00">20.02.20, 07:59</time></span><div class='quote '>А ты почитай-почитай про lock-free структуры. Когда прочитаешь, прочитай еще раз. И только потом ты поймешь, что то, что я процитировал тебя выше - лютая дичь от незнания. Я читаю и учусь, и ты читай.<br>
</div></div><br>
Ну конечно. Ты даже постом выше уже признал что std::cout у тебя не потокобезопасен. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821571'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T08:01:26+00:00">20.02.20, 08:01</time></span><div class='quote '>Этот аргумент я себе запишу в смартфон&#33;&#33;&#33;    Это не должно умереть&#33;</div></div><br>
Конечно запиши, и желательно еще сделай обои на рабочий стол с этим текстом, чтоб не забыть.<br>
<br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">offtop was censored</span>]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821571</guid>
        <pubDate>Thu, 20 Feb 2020 08:01:26 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821571</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:31:33+00:00">20.02.20, 07:31</time></span><div class='quote '>С блокировками оно надежнее</div></div><br>
Этот аргумент я себе запишу в смартфон&#33;&#33;&#33;  :lol:  :lol:  :lol:  Это не должно умереть&#33;]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821570</guid>
        <pubDate>Thu, 20 Feb 2020 07:59:35 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821570</link>
        <description><![CDATA[JoeUser: <br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">offsop was censored</span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:31:33+00:00">20.02.20, 07:31</time></span><div class='quote '>Ну ты ж отцов то читать не хочешь. Мне тебе сюда всю книгу цитировать или как?</div></div><br>
Да нет, я желаю на каждый &quot;профессиональный взгляд&quot; иметь кроме бла-бла-бла - что-то подтверждающее. Ну напиши мне строку в моем коде, обоснуй ошибку. Так уже третья моя просьба мимо. Спрашивается, а нахрена твои слова, если по существу не можешь указать где плохо и как лучше? Извини за эмоции.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:31:33+00:00">20.02.20, 07:31</time></span><div class='quote '>С блокировками оно надежнее, особенно когда у тебя есть расшаренный ресурс</div></div><br>
Бинго&#33; Вот этого ДЖВА года ждал&#33;  :lol: А еще надежнее - записывать параллельно в бумажный журнал.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:31:33+00:00">20.02.20, 07:31</time></span><div class='quote '>Сегодня у тебя один продьюсер и один потребитель. Завтра может быть несколько потребителей, а после завтра - появятся несколько продьюсеров и несколько потребителей. </div></div> <br>
А ты почитай-почитай про lock-free структуры. Когда прочитаешь, прочитай еще раз. И только потом ты поймешь, что то, что я процитировал тебя выше - лютая дичь от незнания. Я читаю и учусь, и ты читай.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821567</guid>
        <pubDate>Thu, 20 Feb 2020 07:31:33 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821567</link>
        <description><![CDATA[Wound: <br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">offtop was censored</span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821566'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:09:39+00:00">20.02.20, 07:09</time></span><div class='quote '>What???  Где, покажи в коде&#33;&#33;&#33;</div></div><br>
Ну ты ж отцов то читать не хочешь. Мне тебе сюда всю книгу цитировать или как? <br>
<br>
<div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body"><strong class='tag-b'>Q</strong>&#58; читать отцов – это хорошо. Но ради синтетического простого примера тратить время на гугление материалов, их освоение и осознания идей и концепций никто ожидаемо не будет. Если хочешь заинтересовать оппонента, не надо отправлять в поиск не_знаю_куда, с его точки зрения, не_знаю_чего не_знаю_зачем_мне_якобы_нужного.</div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821566'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:09:39+00:00">20.02.20, 07:09</time></span><div class='quote '>Киля, ну это же говно&#33;&#33;&#33;<br>
Вместо std::cout &lt;&lt; &quot;Waiting for a completion of the detached thread...&quot; &lt;&lt; std:: endl; я могу написать std::cout &lt;&lt; &quot;Waiting for a completion of the detached thread...&#092;n&quot;; это такая мелочь для синтетического примера. Хотя, да, ты тут прав.</div></div><br>
Ну так вот внезапно, у тебя может выползти проблема в проде и не только там где std::cout, это просто был пример. И тогда - счастливой тебе отладки.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821566'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T07:09:39+00:00">20.02.20, 07:09</time></span><div class='quote '>Да, и кстати, анука обоснуй ... если есть возможность реализовать структуры без блокировок, зачем &quot;мне твое иначе&quot; (с блокировками)? Обоснуй профит&#33;<br>
</div></div><br>
С блокировками оно надежнее, особенно когда у тебя есть расшаренный ресурс. Сегодня у тебя один продьюсер и один потребитель. Завтра может быть несколько потребителей, а после завтра - появятся несколько продьюсеров и несколько потребителей. И будешь ты переписывать свой код от начала и до конца, либо мудохаться с lock-free флагами как у тебя.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821566</guid>
        <pubDate>Thu, 20 Feb 2020 07:09:39 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821566</link>
        <description><![CDATA[JoeUser: <br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">censored</span><br>
<div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body"><strong class='tag-b'>Q</strong>&#58; оффтоп, <strong class='tag-b'>JoeUser</strong>. К чему тут этот переход на личность?<br>
</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821562'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:38:48+00:00">20.02.20, 06:38</time></span><div class='quote '>Плюс ко всему избежать косяков detach/join у потока</div></div><br>
What???  :blink: Где, покажи в коде&#33;&#33;&#33;<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821562'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:38:48+00:00">20.02.20, 06:38</time></span><div class='quote '>на самом деле происходит не атомарный вывод на консоль</div></div><br>
Киля, ну это же говно&#33;&#33;&#33;<br>
Вместо <span class="tag-color tag-color-named" data-value="gray" style="color: gray">std::cout &lt;&lt; &quot;Waiting for a completion of the detached thread...&quot; &lt;&lt; std:: endl;</span> я могу написать <span class="tag-color tag-color-named" data-value="gray" style="color: gray">std::cout &lt;&lt; &quot;Waiting for a completion of the detached thread...&#092;n&quot;;</span> это такая мелочь для синтетического примера. Хотя, да, ты тут прав.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821562'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:38:48+00:00">20.02.20, 06:38</time></span><div class='quote '><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Однако это нестандартные ситуации. В большинстве случаев вы должны выбирать<br>
программирование на основе задач, а не на основе потоков.</div></div></div></div><br>
Вот тут я с Меерсом согласен&#33; Нах натягивать сову на глобус. Если задача ясна, архитектура ясна, зачем архитектуру плющить под детские примеры С++, если можно С++ использовать в полной мере для реализации задуманной архитектуры. Вопрос риторический, есличо. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T07:11:47+00:00">20.02.20, 07:11</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821564'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:48:21+00:00">20.02.20, 06:48</time></span><div class='quote '>А зачем самому lock-free алгоритмы писать? </div></div><br>
А у меня тривиальный стек - так почему бы и нет? <br>
Или лучше обложиться мьютексами ... так сказать - для надежности? :lol: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T07:13:56+00:00">20.02.20, 07:13</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:53:26+00:00">20.02.20, 06:53</time></span><div class='quote '>Да это у него не тз такое, это он сам себе втемяшил что надо делать именно так и никак иначе. А теперь говорит - не учи меня писать, я обчитался книг и теперь хочу писать именно так и никак иначе. </div></div><br>
Киля, при всем уважении, ты не лучше всегда знаешь что я хочу. <br>
Иногда я хочу лучше чем ты можешь за меня хотеть&#33; 8-) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T07:18:22+00:00">20.02.20, 07:18</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:53:26+00:00">20.02.20, 06:53</time></span><div class='quote '>втемяшил что надо делать именно так и никак иначе</div></div><br>
Да, и кстати, анука обоснуй ... если есть возможность реализовать структуры без блокировок, зачем &quot;мне твое иначе&quot; (с блокировками)? Обоснуй профит&#33;]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821565</guid>
        <pubDate>Thu, 20 Feb 2020 06:53:26 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821565</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821564'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:48:21+00:00">20.02.20, 06:48</time></span><div class='quote '>У него изначальное ТЗ - сделать без блокировок, так что cv пролетает мимо.</div></div><br>
Да это у него не тз такое, это он сам себе втемяшил что надо делать именно так и никак иначе. А теперь говорит - не учи меня писать, я обчитался книг и теперь хочу писать именно так и никак иначе.  :-?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821564</guid>
        <pubDate>Thu, 20 Feb 2020 06:48:21 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821564</link>
        <description><![CDATA[OpenGL: А зачем самому lock-free алгоритмы писать? Поверь, это либо просто и с кучей подводных камней, либо сложно и нетривиально. Куда лучше взять какой-нибудь <a class='tag-url' href='https://github.com/khizmax/libcds' target='_blank'>libcds</a> и юзать lock-free хоть очередь хоть стек хоть map. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T06:50:53+00:00">20.02.20, 06:50</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821562'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:38:48+00:00">20.02.20, 06:38</time></span><div class='quote '>Упростит немного код и избавит от лишних флагов, которые только запутывают</div></div><br>
У него изначальное ТЗ - сделать без блокировок, так что cv пролетает мимо.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821562</guid>
        <pubDate>Thu, 20 Feb 2020 06:38:48 +0000</pubDate>
        <title>Распараллеливание выполнения без блокировок</title>
        <link>https://forum.sources.ru/index.php?showtopic=416856&amp;view=findpost&amp;p=3821562</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821555'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T05:58:37+00:00">20.02.20, 05:58</time></span><div class='quote '>Я код не просто из башки взял. Я изучил книгу Энтони Уильямса &quot;Прараллельное программирование в действии&quot;. И &quot;структуры без блокировок&quot; взял оттуда, почти один-в-один, ну или почти, только мои &quot;расширения&quot;, скажем так.</div></div><br>
Ну да и на пустом месте нафигачил кучу какого то непонятного кода. ИМХО, тут можно сделать более понятно безо всяких флагов.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821555'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T05:58:37+00:00">20.02.20, 05:58</time></span><div class='quote '>Нахрена мне другая модель параллелизма, к примеру с std::future? Тем более std::future - это ожидание результата асинхронной операции. Но это не мой случай. У меня нет результата асинхронной операции&#33; У меня есть просто асинхронное исполнение второго потока, результаты которого нужно юзать время от времени (по факту готовности)</div></div><br>
Ну хотя бы затем, чтобы нормально обрабатывать исключения. Плюс ко всему избежать косяков detach/join у потока, которые имеют место быть, ну и для того, что подход на основе задач - более гибкий, т.к. ты предоставляешь возможность системе самой решить что и как необходимо использовать. Во многих случаях она лучше тебя знает как и что следует юзать.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821555'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T05:58:37+00:00">20.02.20, 05:58</time></span><div class='quote '>А вот тут не вижу профита совсем. Если у меня неблокируемое ожидание, чем мне поможет std::condition_variable? Да вообще ничем&#33; Будет просто другой синтаксис, но отдача квантов вычисленя CPU при ожидании останется равной. Так нахрена коту баян?</div></div><br>
Упростит немного код и избавит от лишних флагов, которые только запутывают. Он как раз и нужен для того, чтоб перевести поток в режим ожидания, и проснутся - когда поступит некий сигнал.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821555'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T05:58:37+00:00">20.02.20, 05:58</time></span><div class='quote '>Киля, я внимательно прочел твой пост. И понял одно - ты меня хочешь притянуть за уши к блокировкам на основе мьютексов. Но, поверь, это не мой вариант. Это и первое, что мне пришло в голову. Но я специально изучил главу &quot;Структуры, свободные от блокировок&quot;, чтобы обойтись без локов в угоду атомарным операциям.</div></div><br>
Ну ты себе только говоной боли наберешься в последствии. Во первых самый лучше способ уйти от блокировок - это избавится от общих ресурсов. А у тебя они есть.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821555'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T05:58:37+00:00">20.02.20, 05:58</time></span><div class='quote '>Давай договоримся так, ты указываешь мне как надо делать в моем коде, а указываешь что у меня в потенциале, в моем коде, должно глючить (где и почему). Но не учишь меня жизни сейчас (я сам когда-то если и обломаюсь, то научусь). А я тебе скидываю скан книги Энтони Уильямса &quot;С++ Concurrency in Action&quot; в русском переводе. Только скажи как и куда?</div></div><br>
В принципе можешь делать как хочешь. Но я бы на твоем месте все же Майерса почитал. Например:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Подход на основе задач обычно превосходит свой аналог на основе потоков, и небольшие<br>
фрагменты кода, с которыми вы встретились выше, показывают некоторые причины этого.<br>
Здесь doAsyncwork дает возвращаемое значение, в котором, как мы можем разумно предположить, заинтересован вызывающий doAsyncwork код. В случае вызова на основе потоков<br>
нет простого способа к нему обратиться. При подходе на основе потоков нет простого способа получить доступ к вызову. В случае же подхода на основе задач это можно легко сделать,<br>
поскольку фьючерс, возвращаемый std : : async, предлагает функцию get. Эта функция get<br>
еще более важа, если doAsyncwork генерирует искючение, поскольку get обеспечивает доступ и к нему. При подходе на основе потоков в случае генераии функцией doAsyncWork<br>
исключения програма аварийно завершается (с помощью вызова std: : terminate).<br>
Более фундаментаьным различием между подходаи на основе потоков и на основе задач является воплощение более высокого уровня абстракции в последнем. Он освобождает<br>
вас от деталей уравления потоками, что, кстати, напомнило мне о необходимости рассказать о трех значениях слова поток (tread) в параллельном программировании на С++<br>
</div></div><br>
У std::thread - есть косяки с join/detach, по хорошему его нужно оборачивать в класс. Возможно это не твой случай, но все же. Исключения, которые ты не поймал внутри потока - ты больше нигде и никак не сможешь обработать - утечка ресурсов. Используешь ты их примитивно, потому как использование std::thread - обосновано, когда ты хочешь полностью контролировать работу потока вручную&#33; Ты же ее в своем коде никак не контролируешь от слова совсем, даже приоритет не выставляешь. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821556'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:00:06+00:00">20.02.20, 06:00</time></span><div class='quote '>Хм  ... Принято&#33;&#33;&#33; Пруф?</div></div><br>
Пруф чего именно? <br>
Допустим, вот в этом куске кода:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821499'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:58:31+00:00">19.02.20, 13:58</time></span><div class='quote '>std::cout &lt;&lt; &quot;Waiting for a completion of the detached thread...&quot; &lt;&lt; std:: endl;</div></div><br>
на самом деле происходит не атомарный вывод на консоль, а происходит вызов двух независимых друг от друга функций, между которыми - может быть выполнена некоторая другая задача в другом потоке.<br>
Я тебе все это уже рассказывал вроде как. Ссылку поискать где? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-20T06:44:10+00:00">20.02.20, 06:44</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416856&view=findpost&p=3821558'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T06:09:38+00:00">20.02.20, 06:09</time></span><div class='quote '>Если не сложно, просто перечисли. А я сравню со своей ситуацией, коснется ли меня оно.</div></div><br>
Я тебе перечислю ситуации, когда следует использовать std::thread, так понятней наверно будет, вот из книги Майерса:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Тем не менее существуют ситуации, в которых применение потоков<br>
может быть более подходящим. Они включают в себя следующее.<br>
• Вам нужен доступ к API, лежащей в основе реализации потоков. В С++ API паралельных вычислений обычно реализуется с помощью низкоуровневого платформозависимого API, обычно pthreads или Windows Threads. Эти API в настоящее время<br>
предлагают больше возможностей, чем С++. (Например, С++ не имеет понятий приоритетов или родственности потоков.) Для предоставления достуа к API реализации<br>
потоков std : : thread обычно предагает функцию-член nat ive_handle. Така функциональность отсутствует в std : : future (т.е. в том, что возвращает std : : async).<br>
• Вам требуется возможность оптимизации потоков в вашем приложении. Это может произойти, наример, если вы разрабатываете серверно программное обеспечение с известным профилем выполнения, которое может быть развернуто как единственный процесс на машине с фиксированными аппаратными характеристиками.<br>
• Вам требуется реализовать поточную техолоrию, выходящую за рамки API параллельных вычислений в С++, например пулы потоков на платформах, на которых ваши реализации С++ их не предоставляют.<br>
Однако это нестандартные ситуации. В большинстве случаев вы должны выбирать<br>
программирование на основе задач, а не на основе потоков.<br>
</div></div>]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	