<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Тематический каталог: Многопотоковое программирование под Linux (threads linux gcc)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/5405.html</link>
    <description>Обсуждение статьи тематического каталога: Многопотоковое программирование под Linux (threads linux gcc)&lt;br&gt;&lt;br&gt;Ссылка на текст статьи: http://www.opennet.ru/base/dev/linux_threads.txt.html&lt;br&gt;</description>

<item>
    <title>Многопотоковое программирование под Linux (threads linux gcc) (mamon)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/5405.html#4</link>
    <pubDate>Mon, 27 Sep 2010 08:04:13 GMT</pubDate>
    <description>Действительно имеет место несколько косяков.&lt;br&gt;1) При определении массива thr надо указывать количество элементов как SIZE_I*SIZE_J.&lt;br&gt;2) В циклах обращаться к элементам как i*SIZE_J+z&lt;br&gt;3) При переборе элементов массива соответственно должно быть написано for(int i = 0; i&amp;lt;SIZE_I*SIZE_J; ++i)&lt;br&gt;4) Как уже написал MordorSV действительно лучше создать массив указателей на данные и удалять его в том потоке в котором создавался&lt;br&gt;</description>
</item>

<item>
    <title>Многопотоковое программирование под Linux (threads linux gcc) (Romzzzec)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/5405.html#3</link>
    <pubDate>Tue, 14 Sep 2010 08:48:19 GMT</pubDate>
    <description>&amp;gt;&amp;gt;//создаем поток для ввода&lt;br&gt;&amp;gt;&amp;gt;pthread_create(&amp;thr&#091;i+z&#093;, NULL, input_thr, (void *)arg);&lt;br&gt;&lt;br&gt;как я понял должны создаваться потоки для ввода каждого элемента матрицы, но&lt;br&gt;i=1,z=2 -- &amp;thr&#091;i+z&#093; укажет на &amp;thr&#091;3&#093;&lt;br&gt;i=2,z=1 -- &amp;thr&#091;i+z&#093; укажет на &amp;thr&#091;3&#093;&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt;//Ожидаем завершения всех потоков&lt;br&gt;&amp;gt;&amp;gt;//идентификаторы потоков хранятся в массиве&lt;br&gt;&amp;gt;&amp;gt;pthread_join(thr&#091;i&#093;, NULL);&lt;br&gt;&lt;br&gt;при&lt;br&gt;i=3,z=3 -- &amp;thr&#091;i+z&#093; укажет на &amp;thr&#091;6&#093; и этот поток мы не ждем, т.к. size_i=4, правильно? соответственно и расчет данных для таких элементов будет &quot;левым&quot;?&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Многопотоковое программирование под Linux (threads linux gcc) (MordorSV)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/5405.html#2</link>
    <pubDate>Sun, 11 Jan 2009 11:40:16 GMT</pubDate>
    <description>У автора есть грубая ошибка!&lt;br&gt;в main создан указатель&lt;br&gt;&amp;gt;&amp;gt;DATA *arg;&lt;br&gt;&lt;br&gt;позднее он в цикле инициализируется объектом (тоже в main)&lt;br&gt;&amp;gt;&amp;gt; arg = new DATA;&lt;br&gt;&lt;br&gt;но удаляется объект почемуто из функций потоков&lt;br&gt;&amp;gt;&amp;gt; delete a; // удаляем свои данные&lt;br&gt;&lt;br&gt;причем удаление происходит После разблокирования мутекса!&lt;br&gt;&lt;br&gt;Так делать очень опасно!&lt;br&gt;можете легко прибить чужой объект или вычитать чужие данные (чтение тоже выполняется вне лока мутекса почемуто)&lt;br&gt;&lt;br&gt;Безопасные варианты:&lt;br&gt;1) создать массив указателей&lt;br&gt;DATA *arg&#091;SIZE_I&#093;&#091;SIZE_J&#093;&lt;br&gt;и отдавать каждому потоку указатель на индивидуальный кусок памяти.&lt;br&gt;2)выполнять все операции с общей памятью только при заблокированном мутексе (тоесть в потоках чтение, модификация и освобождение общей памяти должно быть внутри общего pthread_mutex_lock(&amp;lock)). &lt;br&gt;3) удалять объекты только в том потоке который их создал.&lt;br&gt;&lt;br&gt;Код статьи в качестве примера использовать не рекомендуется ибо в нем автор наступил на те грабли от которых по идее должен уберечь читателей.&lt;br&gt;</description>
</item>

<item>
    <title>Многопотоковое программирование под Linux (threads linux gcc) (script)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/5405.html#1</link>
    <pubDate>Thu, 07 Apr 2005 08:19:26 GMT</pubDate>
    <description>sleep использовать не всегда хорошо. Есть более оптимальные решения. Например просыпаться в этом месте по сигналу. </description>
</item>

</channel>
</rss>
