<!DOCTYPE html>
<html class="client-nojs" lang="ru" dir="ltr"><head>
    <meta charset="UTF-8">
    <title>Threads.h</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="icon" type="image/png" href="./_res_/favicon.png">
    <link rel="canonical" href="https://ru.wikipedia.org/wiki/Threads.h"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/skins.vector.styles.legacy.css" rel="stylesheet" type="text/css">
    <meta name="ResourceLoaderDynamicStyles" content="">
    <link href="./_mw_/ext.gadget.common-site.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/ext.gadget.logo.css" rel="stylesheet" type="text/css">
    <link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
    <link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
    <link rel="stylesheet" type="text/css" href="./_res_/footer.css">
    <link rel="stylesheet" type="text/css" href="./_res_/vector.css">
  </head>

  <body class="skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Threads_h rootpage-Threads_h skin-vector action-view">
    <div id="content" class="mw-body" role="main">
      <a id="top"></a>
      <h1 id="firstHeading" class="firstHeading mw-first-heading">threads.h</h1>
      <div id="bodyContent" class="vector-body">
        <div id="contentSub">
          <div id="mw-content-subtitle"></div>
        </div>
        <div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="ru" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="ru" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r138740689">
/* start https://ru.wikipedia.org/ */


.mw-parser-output .ts-Боковая_навигационная_таблица-body{float:right;clear:right;width:23em;margin:0 0 1.0em 1.0em;background:var(--background-color-interactive-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);color:inherit;padding:0.4em;border-spacing:0.2em;text-align:center;line-height:1.4em;font-size:90%}.mw-parser-output .ts-Боковая_навигационная_таблица-outerTitle{padding-bottom:0.2em;font-size:125%;line-height:1.15em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage{padding:0 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-caption,.mw-parser-output .ts-Боковая_навигационная_таблица-image-caption{padding-top:0.2em;line-height:1.2em}.mw-parser-output .ts-Боковая_навигационная_таблица-preTitle{padding-top:0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-row+tr>.ts-Боковая_навигационная_таблица-preTitle{padding-top:0}.mw-parser-output .ts-Боковая_навигационная_таблица-image{padding:0.4em 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-title{padding:0.2em 0.4em 0.2em;font-size:125%;line-height:1.15em;font-weight:bold;background:var(--ruwiki-background-color-blue200,#cfe3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-above{padding:0.2em 0.4em 0.2em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-below{padding:0.2em 0.4em 0.2em;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-heading{padding:0.2em 0;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-list{padding:0.2em 0}


/* end   https://ru.wikipedia.org/ */
</style>
<p><b>threads.h</b>&nbsp;— <a href="%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB" title="Заголовочный файл">заголовочный файл</a> <a href="%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0" title="Стандартная библиотека">стандартной библиотеки</a> <a href="C_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)" class="mw-redirect" title="C (язык программирования)">языка программирования С</a>, содержащий макросы, типы, константы и функции для работы с <a href="%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" title="Поток выполнения">потоками</a>. Данный заголовочный файл появился в стандарте <a href="C11" title="C11">C11</a>.<sup id="cite_ref-stdc11_1-0" class="reference"><a href="#cite_note-stdc11-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>

<div class="mw-heading mw-heading2"><h2 id="Макросы"><span id=".D0.9C.D0.B0.D0.BA.D1.80.D0.BE.D1.81.D1.8B"></span>Макросы</h2></div>
<table class="wikitable">

<tbody><tr>
<th>Имя</th>
<th>Примечания
</th></tr>
<tr>
<td><code>thread_local</code></td>
<td>макрос, используемый для объявления локальной переменной потока
</td></tr>
<tr>
<td><code>TSS_DTOR_ITERATIONS</code></td>
<td>макрос, расширяемый до положительного целочисленного константного выражения, определяющего максимальное количество раз, которое деструктор для локального указателя памяти потока будет вызываться thrd_exit.
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Константы_и_типы"><span id=".D0.9A.D0.BE.D0.BD.D1.81.D1.82.D0.B0.D0.BD.D1.82.D1.8B_.D0.B8_.D1.82.D0.B8.D0.BF.D1.8B"></span>Константы и типы</h2></div>
<table class="wikitable">

<tbody><tr>
<th>Имя</th>
<th>Примечания
</th></tr>
<tr>
<td><code>thrd_success</code></td>
<td>указывает на успешное выполнение
</td></tr>
<tr>
<td><code>thrd_timedout</code></td>
<td>указывает на неудачное выполнение, завершившееся ввиду превышения времени ожидания
</td></tr>
<tr>
<td><code>thrd_busy</code></td>
<td>указывает на неудачное выполнение, завершившееся ввиду невозможности получить доступ к ресурсу
</td></tr>
<tr>
<td><code>thrd_nomem</code></td>
<td>указывает на неудачное выполнение, завершившееся ввиду нехватки памяти
</td></tr>
<tr>
<td><code>thrd_error</code></td>
<td>указывает на неудачное выполнение, завершившееся ввиду какой-либо ошибки
</td></tr>
<tr>
<td><code>thrd_t</code></td>
<td>зависящий от реализации тип, представляющий идентификатор потока
</td></tr>
<tr>
<td><code>thrd_start_t</code></td>
<td>синоним типа <code>int(*)(void*)</code>, используемый функцией thrd_create
</td></tr>
<tr>
<td><code>mtx_plain</code></td>
<td>значение, идентифицирующее тип мьютекса, у которого нет контроля повторного захвата множество раз одним и тем же потоком
</td></tr>
<tr>
<td><code>mtx_recursive</code></td>
<td>значение, идентифицирующее тип мьютекса, повторные захваты которого одним и тем же потоком множество раз допустимы, ведущего счётчик таких захватов
</td></tr>
<tr>
<td><code>mtx_timed</code></td>
<td>значение, идентифицирующее тип мьютекса, поддерживающего захват с возвращением ошибки по истечении указанного времени
</td></tr>
<tr>
<td><code>mtx_t</code></td>
<td>тип, представляющий индентификатор <a href="%D0%9C%D1%8C%D1%8E%D1%82%D0%B5%D0%BA%D1%81" title="Мьютекс">мьютекса</a>
</td></tr>
<tr>
<td><code>cnd_t</code></td>
<td>тип, представляющий индентификатор <a href="%D0%A3%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F" title="Условная переменная">условной переменной</a>
</td></tr>
<tr>
<td><code>tss_t</code></td>
<td>тип, представляющий <a href="%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)" title="Указатель (тип данных)">указатель</a> на локальную память потока
</td></tr>
<tr>
<td><code>tss_dtor_t</code></td>
<td>синоним типа <code>void(*)(void*)</code>, используемого в качестве <a href="%D0%94%D0%B5%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80" title="Деструктор">деструктора</a> локальной памяти потока
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Функции"><span id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8"></span>Функции</h2></div>
<table class="wikitable">

<tbody><tr>
<th>Имя</th>
<th>Примечания
</th></tr>
<tr>
<td><code>int thrd_create(thrd_t *thr, thrd_start_t func, void *arg)</code></td>
<td>создает новый поток, исполняющий func с аргументами arg, помещая его идентификатор в thr
</td></tr>
<tr>
<td><code>int thrd_equal(thrd_t lhs, thrd_t rhs)</code></td>
<td>проверяет, указывает ли lhs на тот же поток, что и rhs
</td></tr>
<tr>
<td><code>thrd_t thrd_current(void)</code></td>
<td>возвращает идентификатор текущего потока
</td></tr>
<tr>
<td><code>int thrd_sleep(const struct timespec* duration, struct timespec* remaining)</code></td>
<td>останавливает текущий поток на длительность duration, помещая оставшее до возобновления работы время в remaining,
</td></tr>
<tr>
<td><code>void thrd_yield(void)</code></td>
<td>предоставляет <a href="%D0%9F%D0%BB%D0%B0%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87" title="Планировщик задач">планировщику задач</a> подсказку перепланировать выполнение потоков, позволяя другим потокам работать
</td></tr>
<tr>
<td><code>_Noreturn void thrd_exit(int res)</code></td>
<td>завершает выполнение текущего потока, устанавливая его <a href="%D0%9A%D0%BE%D0%B4_%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%B0" title="Код возврата">код возврата</a> равным res
</td></tr>
<tr>
<td><code>int thrd_detach(thrd_t thr)</code></td>
<td>отсоединяет поток, идентефицируемый thr, от текущей среды.
</td></tr>
<tr>
<td><code>int thrd_join(thrd_t thr, int *res)</code></td>
<td>ожидает завершение работы потока, идентифицируемого thr, помещая его код исполнения в res
</td></tr>
<tr>
<td><code>int mtx_init(mtx_t* mutex, int type)</code></td>
<td>создает мьютекс типа type, помещая его идентификатор в переменную, на которую указывает mutex
</td></tr>
<tr>
<td><code>int mtx_lock(mtx_t* mutex)</code></td>
<td>останавливает работу текущего потока, пока мьютекс, на который указывает mutex, не будет разблокирован
</td></tr>
<tr>
<td><code>int mtx_timedlock(mtx_t *restrict mutex, const struct timespec *restrict time_point)</code></td>
<td>останавливает работу текущего потока, пока мьютекс, на который указывает mutex, не будет разблокирован, или пока не будет достигнут момент времени, на который указывает time_point
</td></tr>
<tr>
<td><code>int mtx_trylock(mtx_t *mutex)</code></td>
<td>блокирует мьютекс, если он уже не заблокирован
</td></tr>
<tr>
<td><code>int mtx_unlock(mtx_t *mutex)</code></td>
<td>разблокирует мьютекс, на который указывает mutex
</td></tr>
<tr>
<td><code>int mtx_destroy(mtx_t *mutex)</code></td>
<td>уничтожает мьютекс, на который указывает mutex
</td></tr>
<tr>
<td><code>void call_once(once_flag* flag, void (*func)(void) func)</code></td>
<td>вызывает функцию func ровно один раз, даже если вызывается из нескольких потоков
</td></tr>
<tr>
<td><code>int cnd_init(cnd_t* cond)</code></td>
<td>создает условную переменную, помещая ее идентификатор в cond
</td></tr>
<tr>
<td><code>int cnd_signal(cnd_t *cond)</code></td>
<td>разблокирует один поток, ожидающий условную переменную, на которую указывает cond
</td></tr>
<tr>
<td><code>int cnd_wait(cnd_t* cond, mtx_t* mutex)</code></td>
<td>разблокирует мьютекс, на который указывает mutex, и блокирует переменную условия, на которую указывает cond, до тех пор, пока поток не сообщит cnd_signal или cnd_broadcast, или пока не произойдет ложное пробуждение
</td></tr>
<tr>
<td><code>int cnd_timedwait( cnd_t* restrict cond, mtx_t* restrict mutex, const struct timespec* restrict time_point )</code></td>
<td>разблокирует мьютекс, на который указывает mutex, и блокирует переменную условия, на которую указывает cond, до тех пор, пока поток не сообщит cnd_signal или cnd_broadcast, или пока не будет достигнут момент времени, на который указывает time_point, или пока не произойдет ложное пробуждение
</td></tr>
<tr>
<td><code>void cnd_destroy(cnd_t* cond);</code></td>
<td>уничтожает условную переменную, на которую указывает cond
</td></tr>
<tr>
<td><code>int tss_create(tss_t* tss_key, tss_dtor_t destructor)</code></td>
<td>создает локальное хранилище потока с заданным деструктором destructor, помещая его идентификатор в переменную, на которую указывает tss_key
</td></tr>
<tr>
<td><code>void *tss_get(tss_t tss_key)</code></td>
<td>возвращает данные, содержащиеся в локальном хранилище потока, идентифицируемом tts_key
</td></tr>
<tr>
<td><code>int tss_set(tss_t tss_id, void *val)</code></td>
<td>устанавливает значение, хранящееся в локальном хранилище потока, идентифицируемом tts_key, равным val
</td></tr>
<tr>
<td><code>void tss_delete(tss_t tss_id)</code></td>
<td>уничтожает локальное хранилище потока, идентифицируемое tts_id
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Ссылки"><span id=".D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"></span>Ссылки</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://en.cppreference.com/w/c/thread">threads.h на C++ Reference</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Примечания"><span id=".D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D1.8F"></span>Примечания</h2></div>
<div class="reflist columns" style="list-style-type: decimal;">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-stdc11-1"><span class="mw-cite-backlink"><a href="#cite_ref-stdc11_1-0">↑</a></span> <span class="reference-text"><span class="citation"><span lang="und"><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf">ISO/IEC 9899:201x</a></span><span class="hidden-ref" style="display:none;">&nbsp;</span>. Дата обращения: 11 июля 2020. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180329042731/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf">Архивировано</a> 29 марта 2018 года.</span></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
    Эта статья взята у (из) <a class="external text" title="Последний раз редактировалась 2025-07-18" href="https://ru.wikipedia.org/wiki/?title=Threads.h&amp;oldid=146915823">Википедия</a>. Текст лицензируется по <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.ru">Creative Commons Attribution-Share Alike 4.0</a>. К медиа файлам могут применятся дополнительные условия.
</div>
</div><!--/htdig_noindex--></div>
      </div>
    </div>
     <script src="./_webp_/webpHandler.js"></script>
  

</body></html>