<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: pthread и что-нибудь вроде suspend() и resume()</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/4558.html</link>
    <description>Привет всем.&lt;br&gt;Нужно в Линуксе сделать несколько потоков и чтобы один из них мог останавливать любой другой в любой момент и мог потом разрешать ему двигаться дальше. К примеру, в JAVA есть такие функции suspend() и resume() - соответственно, остановить и продолжить поток. Кстати, остановки в заранее опреденённых в потоках местах с помощью мутексов не канают - нужно внешнее управление в произвольном месте.&lt;br&gt;Да, зачем эта вся ахинея: нужно сымитировать свой планировщик потоков, а ещё точнее, протестировать планировщик от микрооперационки для микроконтроллеров, и сделать именно собственную заморозку/разморозку потоков.&lt;br&gt;Может, найдутся у кго-нибудь хорошие мысли ?? Спасибо :)</description>

<item>
    <title>pthread и что-нибудь вроде suspend() и resume() (Yurial)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/4558.html#2</link>
    <pubDate>Fri, 11 Apr 2008 06:21:09 GMT</pubDate>
    <description>Note that pthread_kill() only causes the signal to be handled in the context of the given thread; the signal action (termination or stopping) affects the process as a whole. (с) man pthread_kill&lt;br&gt;&lt;br&gt;Отметьте, что pthread_kill () только заставляет сигнал быть обработанным в контексте данной нити; действие сигнала (завершение или остановка) затрагивает процесс в целом. (c) promt.ru&lt;br&gt;</description>
</item>

<item>
    <title>pthread и что-нибудь вроде suspend() и resume() (impatt)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/4558.html#1</link>
    <pubDate>Mon, 15 Aug 2005 09:38:11 GMT</pubDate>
    <description>Сам себе и отвечаю:&lt;br&gt;оказывается, можно функцией pthread_kill посылать соответствующие сигналы потоку. Нижеследующая программка иллюстрирует сказанное.&lt;br&gt;&lt;br&gt;#include &amp;lt;pthread.h&amp;gt;&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;signal.h&amp;gt;&lt;br&gt;&lt;br&gt;//это отдельный поток, выполняется параллельно после его запуска функцией pthread_create()&lt;br&gt;//печатает каждую секунду сообщение и так пока программа (процесс) не завершится&lt;br&gt;void* my_t(void *hlam)&#123;&lt;br&gt;while(1)&#123;&lt;br&gt;sleep(1);//sleep 1 second&lt;br&gt;puts(&quot;My thread is work&quot;);//still alive :)&lt;br&gt;&#125;&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;&lt;br&gt;int main()&#123;&lt;br&gt;pthread_t th;//дескриптор создаваемого потока&lt;br&gt;pthread_create(&amp;th, NULL, my_t, (void *)&quot;none&quot;);//создаём поток&lt;br&gt;puts(&quot;***Thread was created***&quot;);//поток рождён.&lt;br&gt;sleep(3);//сон 3 секунды&lt;br&gt;pthread_kill(th, SIGSTOP);//шлём сигнал &quot;СТОП&quot;&lt;br&gt;puts(&quot;***Thread was suspended***&quot;);&lt;br&gt;sleep(5);&lt;br&gt;pthread_kill(th, SIGCONT);//шлём сигнал &quot;ПРОДОЛЖИТЬ&quot;&lt;br&gt;puts(&quot;***Thread was resumed***&quot;);&lt;br&gt;sleep(3);&lt;br&gt;return 0;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
