<?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=413311&amp;view=findpost&amp;p=3775579</guid>
        <pubDate>Fri, 03 Aug 2018 03:09:14 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775579</link>
        <description><![CDATA[JoeUser: <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=413311&view=findpost&p=3775566'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-03T01:10:42+03:00">02.08.18, 22:10</time></span><div class='quote '>пусть даже бессознательно</div></div><br>
 :good: </div></div>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775572</guid>
        <pubDate>Thu, 02 Aug 2018 22:53:28 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775572</link>
        <description><![CDATA[Wound: Я про именованые объекты позабыл просто, и действительно, мьютексов на всех не напасешься, <strong class='tag-b'>Qraizer</strong>, ты навел меня на опрделенную мысль, за что тебе спасибо. Я понял что все std::mutex скорее всего быстрые, да я дебажил std::mutex, но тем не менее хотел понять как лочить объекты между процессами. В принципе логично, что это должен делать тот - кому это нужно. Вопрос исчерпан.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775571</guid>
        <pubDate>Thu, 02 Aug 2018 22:52:36 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775571</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775568'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T22:39:16+00:00">02.08.18, 22:39</time></span><div class='quote '>Или лучше всегда юзать std::recursive_mutex, и не париться?</div></div>Разница между std::mutex и std::recursive_mutex всего лишь в одном аспекте поведения: если нитка залочила объект, то в первом случае повторный захват ею этого же объекта приведёт к неопределённому поведению, тогда как во втором случае выполнение продолжится без любой дополнительной блокировки, однако отпустить объект нитка должно столько же раз, сколько захватывала, иначе он так и останется ею занятым. Это поведение строго согласуется и с критическими секциями, и с мьютексами из WinAPI. Первое же поведение ровно такое же, как у семафоров со счётчиком 1, если неопределённое поведение доопределить до дидлука, так что не удивлюсь, если std::mutex реализованы через семафоры.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775570</guid>
        <pubDate>Thu, 02 Aug 2018 22:48:00 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775570</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775569'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T22:44:31+00:00">02.08.18, 22:44</time></span><div class='quote '>На самом деле уверенность практически 100%. Для межпроцессной синхронизации нужны именованные объекты, для чего в std ничего не предусмотрено. С другой стороны, тебе ничто не мешает написать свои мьютексы, тишь бы их слопал std::lock_guard&lt;&gt;. Требования для этого довольно низки. </div></div><br>
Я понял, спасибо за разъяснения. В принципе логично. Мне было принципиально услышать аргументы, а не просто &quot;Вот так и все тут&quot;.<br>
Вопрос решен.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775569</guid>
        <pubDate>Thu, 02 Aug 2018 22:44:31 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775569</link>
        <description><![CDATA[Qraizer: На самом деле уверенность практически 100%. Для межпроцессной синхронизации нужны именованные объекты, для чего в std ничего не предусмотрено. С другой стороны, тебе ничто не мешает написать свои мьютексы, лишь бы их слопал std::lock_guard&lt;&gt;. Требования для этого <a class='tag-url' href='https://en.cppreference.com/w/cpp/named_req/BasicLockable' target='_blank'>довольно низки</a>.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775568</guid>
        <pubDate>Thu, 02 Aug 2018 22:39:16 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775568</link>
        <description><![CDATA[Wound: <strong class='tag-b'>JoeUser</strong>, вот смотри - есть у тебя std::string и допустим std::endl, ты пишешь кросплатформеную программу, и нужно что то вывести куда то там в файл или в поток - не важно, ты пишешь:<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">std::cout &#60;&#60; &quot;Message&quot; &#60;&#60; std::endl</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
И пишешь ты это например на определенном компиляторе, допустим шланг там или МСВС, или ГЦЦ, не важно, но ведь ты ожидаешь что везде и всюду, на любой ОС -  ты получишь сообщение &quot;Меssage&quot;. Потоки были стандартизированы еще в С++11, ЕМНИП. Отсюда возникает вопрос в использовании - раз они стандартные, значит и к ним какие то требования должны идти, вот я и хочу услышать - что такое std::mutex и чем он принципиально отличается от std::recursive_mutex. Иначе тогда смысл теряется в кроссплатформенном программировании. Я могу юзнуть std::mutex, под Линух, и все тесты написать и все будет в Шоколаде, но под винду моя программа не будет работать вообще, хотя будет написана по последнему слову стандарта. <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="2018-08-02T22:44:05+00:00">02.08.18, 22:44</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T22:34:06+00:00">02.08.18, 22:34</time></span><div class='quote '>Резюме: почти наверняка используются критические секции. У MS не было причин выбирать более медленные мьютексы, т.к. Стандарт не способен задействовать их преимущества. </div></div><br>
То есть std::mutex - это почти наверняка скорее всего критическая секция? Я правильно понимаю? То есть если я использую std::mutex, то в принципе могу не волноваться о том, что производительность просядет за счет переключения в kernel mode, по крайней мере в Windows? Или лучше всегда юзать std::recursive_mutex, и не париться?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775567</guid>
        <pubDate>Thu, 02 Aug 2018 22:34:06 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775567</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>JoeUser</strong> отчасти прав. Стандарт регламентирует поведение, но не реализацию. Так что MS может сотворить, что ей заблагорассудится, лишь бы поведение соответствовало. Т.к. и мьютексы, и критические секции в WinAPI обладают одинаковым поведением, заюзаны могут быть как те, так и другие.<br>
Теперь анализ постановки задачи. Лично я не думаю, что MS будет использовать мьютексы просто так, потому что захотелось почаще перекидывать программу в ядро. Так что если нет особых причин, скорее всего используются критические секции. Мьютексы от критических секций по поведению отличаются лишь тем, что могут шариться между процессами. Других отличий нет. И тут вот засада: Стандарт не описывает взаимодейсвтие разных программ, он описывает поведение некой виртуальной исполнительной среды C++ в части подготовки и исполнения одной программы. Поэтому в нём не предусмотрено ничего для описания взаимодействия разных программ, даже если они все написаны на C++.<br>
Резюме: почти наверняка используются критические секции. У MS не было причин выбирать более медленные мьютексы, т.к. Стандарт не способен задействовать их преимущества.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775566</guid>
        <pubDate>Thu, 02 Aug 2018 22:10:42 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775566</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:55:05+00:00">02.08.18, 21:55</time></span><div class='quote '>Как раз об этом и говорил - о &quot;реализации&quot; :lol: Реализация std::recursive_mutex и std::mutex в твоей студии, в migw32, в clang&#39;е - может отличаться реализацией как с использованием мьютексов винды, так и с использованием критических секций. И это предстоит тебе найти в исходниках. Исходники STL студии ты вряд ли найдешь, а для mingw-w64 запросто.</div></div><br>
Вот видишь, и ты, пусть даже бессознательно, указал на некоторые проблемы. В частности - в разных компиляторах - слово <strong class='tag-b'>мьютекс</strong> - может по разному интерпретироваться, и по разному реализовываться.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:55:05+00:00">02.08.18, 21:55</time></span><div class='quote '>Но ведь ты желаешь лучшей производительности?</div></div><br>
Да&#33;<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:55:05+00:00">02.08.18, 21:55</time></span><div class='quote '>Тогда тебе придется выяснить работу std::recursive_mutex и std::mutex и для других осей.</div></div><br>
Почему осей? Почему не компиляторов? Какие гарантии что в Майкрософт - std::mutex реализовали через критические секции? Я именно об этом и спрашиваю как бы  :-? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:55:05+00:00">02.08.18, 21:55</time></span><div class='quote '> Так вот, к примеру, для FreeBSD и Mac OSX крайне желательно использовать clang&#39;овскую реализацию STL, и ее уже исследовать. Бенчмарки там какие-то по этому вопросу пролетали. </div></div><br>
Это твое ИМХО, потому что бенчмарки пролетали? Или почему? А в чем отличие от стандарта С++?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:55:05+00:00">02.08.18, 21:55</time></span><div class='quote '>Вижу два выхода ... или все ж исследовать исходники (или тупо написать наборы тестов), или использовать PIMPL и для венды везде где можно использовать критические секции.<br>
</div></div><br>
То есть STL не гарантирует что std::mutex - поможет в лочке ресурсов между процессами? А значит можно сделать вывод что std::mutex реализован через Критические секции?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775565'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:55:05+00:00">02.08.18, 21:55</time></span><div class='quote '>Лан, Киля, народ подтянется - возможно кто-то это уже разбирал. Пошел я в анабиоз :)</div></div><br>
Да, давай, приятно было пообщаться ))]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775565</guid>
        <pubDate>Thu, 02 Aug 2018 21:55:05 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775565</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775564'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:39:03+00:00">02.08.18, 21:39</time></span><div class='quote '>Какие исходники? Те что ты привел по ссылке или те что у меня в студии ?</div></div><br>
Как раз об этом и говорил - о &quot;реализации&quot; :lol: Реализация std::recursive_mutex и std::mutex в твоей студии, в migw32, в clang&#39;е - может отличаться реализацией как с использованием мьютексов винды, так и с использованием критических секций. И это предстоит тебе найти в исходниках. Исходники STL студии ты вряд ли найдешь, а для mingw-w64 запросто.<br>
<br>
Но, коль ты упомянул:<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775555'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T20:49:03+00:00">02.08.18, 20:49</time></span><div class='quote '>ИМХО без этого знания - я не могу писать <strong class='tag-b'>кросплатформенное</strong> приложение и опираться на стандартную библиотеку STL. </div></div><br>
<br>
Но ведь ты желаешь лучшей производительности? Тогда тебе придется выяснить работу std::recursive_mutex и std::mutex и для других осей.  Так вот, к примеру, для FreeBSD и Mac OSX крайне желательно использовать clang&#39;овскую реализацию STL, и ее уже исследовать. Бенчмарки там какие-то по этому вопросу пролетали. <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="2018-08-02T21:59:08+00:00">02.08.18, 21:59</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775564'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:39:03+00:00">02.08.18, 21:39</time></span><div class='quote '>А если поддерживаются, то под Винду я получу проседание производительности на порядок? </div></div><br>
Вижу два выхода ... или все ж исследовать исходники (или тупо написать наборы тестов), или использовать PIMPL и для венды везде где можно использовать критические секции. <br>
<br>
Лан, Киля, народ подтянется - возможно кто-то это уже разбирал. Пошел я в анабиоз  :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775564</guid>
        <pubDate>Thu, 02 Aug 2018 21:39:03 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775564</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775563'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:31:22+00:00">02.08.18, 21:31</time></span><div class='quote '>Wound, ты уже третий раз повторяешься. Смотри исходники&#33;</div></div><br>
Какие исходники? Те что ты привел по ссылке или те что у меня в студии ?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775563'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:31:22+00:00">02.08.18, 21:31</time></span><div class='quote '>К примеру реализация С++ в тулчейне MinGW-w64 имеет две варианта (реализации) с моделями win-theads и posix-threads. И, скорее всего, мьютексы там будут реализованы по разному. Как именно, в исходниках быть должно. Я не смарел - не знаю. </div></div><br>
Ты понимаешь чем отличается виндовый мьютекс от критической секции? Ты понимаешь что акроним - <strong class='tag-b'>Мьютекс</strong>, а это именно уже акроним в Windows системе - означает, это очень медленная операция?<br>
Я не знаю понимаешь ли ты это отличия или нет. Фишка даже не в этом, фишка в другом - как мне писать программу, многопоточную - для разных систем - допустим Windows и Linux ? Мне достаточно использовать STL мьютекс или мне так же, как и прежде придется писать код под разные платформы? <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="2018-08-02T21:46:49+00:00">02.08.18, 21:46</time></span></span><br>
Просто я ожидаю от STL, что получу что то универсальное для любой ОС(ну как Java или там C# -им плевать где запустился - всегда действуют одни и те же правила, ну это в среднем.). В итоге пока не ясно, но по предварительным рассуждениям - я получаю что то узконаправленное под конкретную задачу, привязанную к Linux, потому что Windows Mutex не поддерживаются? А если поддерживаются, то под Винду я получу проседание производительности на порядок?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775563</guid>
        <pubDate>Thu, 02 Aug 2018 21:31:22 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775563</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775559'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:24:14+00:00">02.08.18, 21:24</time></span><div class='quote '>Вопрос - он реализован как критическая секция или нет?</div></div><br>
<strong class='tag-b'>Wound</strong>, ты уже третий раз повторяешься. Смотри исходники&#33;<br>
К примеру реализация С++ в тулчейне MinGW-w64 имеет две варианта (реализации) с моделями win-theads и posix-threads. И, скорее всего, мьютексы там будут реализованы по разному. Как именно, в исходниках быть должно. Я не смарел - не знаю.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775562</guid>
        <pubDate>Thu, 02 Aug 2018 21:27:30 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775562</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775558'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:20:10+00:00">02.08.18, 21:20</time></span><div class='quote '> Вообще-то для меня будет откровением если ты приведешь материал из Стандарта, где вообще упоминается M&#036; Windows, применительно к любому разделу/теме.</div></div><br>
Речь не о упоминании Windows в стандарте С++. Ты меня не так понял видимо.<br>
<br>
Ок, я повторюсь и перефразирую:<br>
Перед тобой стоит задача распаралелить алгоритм, при этом как можно лучше его оптимизировать. Что ты выберешь - std::mutex или std::recursive_mutex - для защиты общих ресурсов, и почему? <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="2018-08-02T21:30:00+00:00">02.08.18, 21:30</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775562'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:27:30+00:00">02.08.18, 21:27</time></span><div class='quote '>Что ты выберешь - std::mutex или std::recursive_mutex - для защиты общих ресурсов, и почему? </div></div><br>
А если нужно защитить ресурс - передаваемый между процессами - какой механизм ты выберешь и почему?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775560</guid>
        <pubDate>Thu, 02 Aug 2018 21:26:03 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775560</link>
        <description><![CDATA[JoeUser: Хотя вот предисловие к последнему стандарту C++17:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>ISO/IEC 14882:2017 specifies requirements for implementations of the C++ programming language. The first such requirement is that they implement the language, so this document also defines C++. Other requirements and relaxations of the first requirement appear at various places within this document.</div></div><br>
<br>
Как видишь - регламентируются требования к реализации языка, но ... читаем между строк ... не сама реализация. Да и глупо это было бы регламентировать реализацию на стопицот осей.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775559</guid>
        <pubDate>Thu, 02 Aug 2018 21:24:14 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775559</link>
        <description><![CDATA[Wound: Меня интересует конкретно вопрос - std::mutex - очень часто и везде используется, в 95% хелпах, гуглах и остального ты встретишь именно std::mutex. Вопрос - он реализован как критическая секция или нет?<br>
Если он реализован как виндовый Мьютекс, и постоянно лезет в kernel mode - то какой смысл его вообще использовать?<br>
Вот мой основной вопрос. <br>
А вот std::recursive_mutex очень сильно похож на критическую секцию. Но возникает вопрос - чем std::mutex тогда лучше? Я хочу гарантированного быстродействия, стоит ли мне для этого набирать слово <strong class='tag-b'>recursive_</strong> или можно обойтись std::mutex, что короче в наборе по крайней мере букв?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775558</guid>
        <pubDate>Thu, 02 Aug 2018 21:20:10 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775558</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775557'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T21:06:01+00:00">02.08.18, 21:06</time></span><div class='quote '>Ты уверен в этом? Можешь привести раздел стандарта, говорящего об этом?<br>
Я имею ввиду конкретно мьютексы. </div></div><br>
Уверен. Вообще-то для меня будет откровением если ты приведешь материал из Стандарта, где вообще упоминается M&#036; Windows, применительно к любому разделу/теме.<br>
<br>
Лучче поищи дискуссии <a class='tag-url' href='https://stackoverflow.com/questions/17242516/mingw-w64-threads-posix-vs-win32' target='_blank'>типа этой</a>. <br>
Там как раз обсуждаются реализации.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775557</guid>
        <pubDate>Thu, 02 Aug 2018 21:06:01 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775557</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775556'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T20:58:08+00:00">02.08.18, 20: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="2018-08-02T21:10:11+00:00">02.08.18, 21:10</time></span></span><br>
Дело в том, что я для себя хочу окончательно этот вопрос решить. И фразы, даже сказанные в повелительном или повествовательном или в финальном тоне - меня не устраивают. Их можно интерпретировать как - Это твое ИМХО.<br>
Я же хочу объективности. По возможности. Пусть даже без цитирования стандарта, но с пояснением - почему так.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775556</guid>
        <pubDate>Thu, 02 Aug 2018 20:58:08 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775556</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>Wound</strong>, повторюсь - твой вопрос вполне понятен.<br>
Стандарт не регламентирует реализацию.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775555</guid>
        <pubDate>Thu, 02 Aug 2018 20:49:03 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775555</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775554'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T20:40:57+00:00">02.08.18, 20:40</time></span><div class='quote '>Не думаю, что это можно будет найти в Стандарте.<br>
Речь же идет о &quot;реализации&quot; - ее и нужно копать.<br>
Или уже кем-то раскопанное читать, либо самому исследовать исходники STL.</div></div><br>
Фишка основная, которая послужила целью к созданию этой темы, такая -&gt; Вот есть Мьютексы, объекты ядра, и есть Критические секции - не объекты ядра. Первые могут лочить потоки глобально для параллельных процессов, вторые локально - для потоков в рамках одного процесса. Какую структуру данных мне нужно юзать из нового стандарта, чтобы залочить ресурс, использующийся между разными процессами? И будет ли профит, если вдруг я пишу узконаправленное приложение, которое должно обойтись критической секцией, и использую при этом std::recursive_mutex, вместо std::mutex?<br>
<br>
ИМХО без этого знания - я не могу писать кросплатформенное приложение и опираться на стандартную библиотеку STL. Я хочу выяснить для себя - могу я на нее полагаться при кросплатформенном программировании или нет. <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="2018-08-02T20:53:06+00:00">02.08.18, 20:53</time></span></span><br>
Если это все оставленно на откуп, то в этом случае std::mutex и std::recursive_mutex могут быть реализованы через критические секции, тогда решая задачу, где мне нужно залочить ресурс между процессами - я внезапно для себя, могу выяснить, что зря я тут юзал std::mutex. А этого бы не хотелось. Хочется каких то гарантий происходящего.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775554</guid>
        <pubDate>Thu, 02 Aug 2018 20:40:57 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775554</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413311&view=findpost&p=3775551'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-02T19:37:34+00:00">02.08.18, 19:37</time></span><div class='quote '>Отсылки к конкретным пунктам стандарта - очень сильно приветствуются. Спасибо за пояснения. </div></div><br>
Не думаю, что это можно будет найти в Стандарте.<br>
Речь же идет о &quot;реализации&quot; - ее и нужно копать. <br>
Или уже кем-то раскопанное читать, либо самому исследовать исходники STL.<br>
<br>
<a class='tag-url' href='https://github.com/gcc-mirror/gcc' target='_blank'>Линк</a>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775551</guid>
        <pubDate>Thu, 02 Aug 2018 19:37:34 +0000</pubDate>
        <title>Мьютексы С++11, С++14, С++17</title>
        <link>https://forum.sources.ru/index.php?showtopic=413311&amp;view=findpost&amp;p=3775551</link>
        <description><![CDATA[Wound: Всем привет&#33;<br><br>Возник такой вопрос - вот в std есть куча мьютексов на выбор(вроде в C++14&#39;ом стандарте их 4 - mutex, recursive_mutex, и два таких же с префиксом timed,), меня интересуют ровно два типа мьютексов - std::mutex и std::recursive_mutex.<br>Каково их принципиальное отличие, на уровне ОС Windows?<br>Да, рекурсивный мьютекс очень сильно напоминает CRITICAL_SECTION. Но как я погляжу везде и всюду все используют std::mutex. <br>При этом  если сравнивать конкретно Windows синхронизацию, то из книги того же Рихтера, очевидно что Mutex - это объект ядра Windows, а значит ему постоянно приходится переключаться из User Mode в Kernel Mode, что очень медленно, при этом CRITICAL_SECTION - реализована на основе interlocked функций, что существенно повышает производительность(Так как не нужно постоянно переходить в kernel mode). <br><br>У меня давно возник вопрос - как реализованы мьютексы в пространстве -&gt; std, для той же Windows(есть ли какие нибудь ремарки для них специфичные)? Есть ли об этом в стандарте какие то оговорки?<br>Допустим я пишу какой то критичный по производительности паралельно-выполняющийся алгоритм, и при этом использую std::mutex, какие преимущества я получу, если заменю std::mutex на std::recursive_mutex? При этом, мне не нужно его захватывать больше 1-го раза. И есть ли смысл вообще использовать std::recursive_mutex, если я не хочу его захватывать больше 1 раза?<br>Так же интересует, вдруг мне нужна блокировка на уровне ядра? Я ведь правильно понимаю что для этого нужно использовать обычный std::mutex?<br><br>Выводы:<br>Правильно ли я понимаю что:<br>std::mutex - Windows mutex - медленный, переключающийся в kernel mode<br>std::recursive_mutex - CRITICAL_SECTION - быстрый, по сравнению с обычным виндовым мьютексом.<br>???<br><br>Отсылки к конкретным пунктам стандарта - очень сильно приветствуются. Спасибо за пояснения.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	