~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ C5AF4DA0F6D7083A15B78AE69AA202EB__1712665980 ✰
Заголовок документа оригинал.:
✰ pthreads - Wikipedia ✰
Заголовок документа перевод.:
✰ pthreads — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Pthreads ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/c5/eb/c5af4da0f6d7083a15b78ae69aa202eb.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/c5/eb/c5af4da0f6d7083a15b78ae69aa202eb__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:45:27 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 9 April 2024, at 15:33 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

pthreads — Википедия Jump to content

pthreads

Из Википедии, бесплатной энциклопедии

В вычислениях , потоки POSIX , широко известные как pthreads , представляют собой модель выполнения существующую независимо от языка программирования , а также модель параллельного выполнения . Это позволяет программе управлять несколькими различными потоками работы, которые перекрываются во времени. Каждый поток работы называется потоком , а создание и управление этими потоками достигается путем вызовов API потоков POSIX . POSIX Threads — это API, определенный .1c Института инженеров по электротехнике и радиоэлектронике (IEEE) стандартом POSIX , расширения потоков (IEEE Std 1003.1c-1995) .

Реализации API доступны во многих Unix-подобных POSIX-совместимых операционных системах , таких как FreeBSD , NetBSD , OpenBSD , Linux , macOS , Android , [1] Solaris , Redox и AUTOSAR Adaptive, обычно поставляемые в виде библиотеки libpthread . Также существуют реализации DR-DOS и Microsoft Windows : в подсистеме SFU/SUA , которая обеспечивает собственную реализацию ряда API-интерфейсов POSIX, а также в сторонних пакетах, таких как pthreads-w32 . [2] который реализует pthreads поверх существующего Windows API .

Содержание [ править ]

pthreads определяет набор C. языка программирования типов , функций и констант Он реализован с помощью pthread.h потоков заголовок и библиотека .

Существует около 100 процедур потоков, все с префиксами. pthread_ и их можно разделить на четыре группы:

POSIX API семафоров работает с потоками POSIX, но не является частью стандарта потоков, поскольку он определен в стандарте POSIX.1b, Расширения реального времени (IEEE Std 1003.1b-1993) . Следовательно, семафорные процедуры имеют префикс sem_ вместо pthread_.

Пример [ править ]

Пример, иллюстрирующий использование pthreads в C:

#include   <stdio.h> 
 #include   < stdlib.h 
 > #include   <assert.h> 
 #include   <pthread.h> 
 #include   <unistd.h> 

 #define NUM_THREADS 5 

 void   *  Perform_work  (  void   *  аргументы  ) { 
   int   index   =   *  ((  int   *  )  аргументы  ); 
    int   Sleep_time   =   1   +   rand  ()   %   NUM_THREADS  ; 
    printf  (  "Поток %d: запущен.  \n  "  ,   index  ); 
    printf  (  "Поток %d: будет спать %d секунд.  \n  "  ,   index  ,   Sleep_time  ); 
    спать  (  время_сна  ); 
    printf  (  "Поток %d: завершен.  \n  "  ,   index  ); 
    вернуть   НУЛЬ  ; 
  } 

 Int   Main  (  void  )   { 
   pthread_t   потоков  [  NUM_THREADS  ]; 
    int   thread_args  [  NUM_THREADS  ]; 
    интервал   я  ; 
    int   result_code  ; 
  
    //создаем все потоки один за другим 
   for   (  i   =   0  ;   i   <   NUM_THREADS  ;   i  ++  )   { 
     printf  (  "In main: Создание потока %d.  \n  "  ,   i  ); 
      thread_args  [  я  ]   =   я  ; 
      result_code   =   pthread_create  (  &  threads  [  i  ,   NULL  ,   Perform_work  и   [  thread_args  i  ]  ]); 
      утверждать  (  !  код_результата  ); 
    } 

   printf  (  "В основном: все потоки созданы.  \n  "  ); 

    //ждем завершения каждого потока 
   for   (  i   =   0  ;   i   <   NUM_THREADS  ;   i  ++  )   { 
     result_code   =   pthread_join  (  threads  [  i  ],   NULL  ); 
      утверждать  (  !  код_результата  ); 
      printf  (  "В основном: поток %d завершился.  \n  "  ,   i  ); 
    } 

   printf  (  "Основная программа завершилась.  \n  "  ); 
    вернуть   0  ; 
  } 

Эта программа создает пять потоков, каждый из которых выполняет функцию Perform_work , которая выводит уникальный номер этого потока в стандартный вывод. Если бы программист хотел, чтобы потоки взаимодействовали друг с другом, для этого потребовалось бы определить переменную вне области действия любой из функций, сделав ее глобальной переменной . Эту программу можно скомпилировать с помощью компилятора gcc следующей командой:

gcc pthreads_demo.c -pthread -o pthreads_demo
 

Вот один из многих возможных результатов запуска этой программы.

В основном: создание потока 0. 
 В основном: создание потока 1. 
 В основном: создание потока 2. 
 В основном: создание потока 3. 
 Поток 0: запущен. 
  В основном: Создание потока 4. 
 Поток 3: Начато. 
  Тема 2: Началось. 
  Поток 0: будет спать 3 секунды. 
  Тема 1: Началось. 
  Тема 1: Будет спать 5 секунд. 
  Тема 2: будет спать 4 секунды. 
  Тема 4: Началось. 
  Тема 4: Будет спать 1 секунду. 
  В основном: все потоки созданы. 
  Тема 3: Будет спать 4 секунды. 
  Тема 4: Закончена. 
  Тема 0: Завершена. 
  В основном: поток 0 завершился. 
  Тема 2: Закончена. 
  Тема 3: Закончена. 
  Тема 1: Закончена. 
  В основном: поток 1 завершился. 
  В основном: поток 2 завершился. 
  В основном: поток 3 завершился. 
  В основном: поток 4 завершился. 
  Основная программа завершилась. 

POSIX-потоки для Windows [ править ]

Windows не поддерживает стандарт pthreads изначально, поэтому проект Pthreads4w стремится предоставить переносимую реализацию оболочки с открытым исходным кодом. Его также можно использовать для переноса программного обеспечения Unix (которое использует pthreads) с небольшими изменениями или вообще без изменений на платформе Windows. [4] Pthreads4w версия 3.0.0 [5] или более поздняя версия, выпущенная под лицензией Apache Public License v2.0, совместима с 64-битными или 32-битными системами Windows. Версия 2.11.0, [6] выпущенный по лицензии LGPLv3, также совместим с 64-битными или 32-битными версиями.

Проект Mingw-w64 также содержит реализацию оболочки pthreads, winpthreads , которая пытается использовать больше собственных системных вызовов, чем проект Pthreads4w. [7]

Interix Подсистема среды , доступная в пакете Службы Windows для UNIX/Подсистема для приложений на базе UNIX, предоставляет собственный порт API pthreads, т.е. не сопоставленный с Win32 API, а встроенный непосредственно в интерфейс системных вызовов операционной системы . [8]

См. также [ править ]

Ссылки [ править ]

  1. ^ «libc/bionic/pthread.c — платформа/bionic — Git в Google» . android.googlesource.com .
  2. ^ «Pthread Win-32: Уровень соответствия стандартам» . 22 декабря 2006 г. Архивировано из оригинала 11 июня 2010 г. Проверено 29 августа 2010 г.
  3. ^ «pthread.h(0p) — страница руководства Linux» . Проверено 18 декабря 2022 г.
  4. ^ Харт, Джонсон М. (21 ноября 2004 г.). «Эксперименты с библиотекой Pthreads с открытым исходным кодом и некоторые комментарии» . Архивировано из оригинала 30 августа 2010 г. Проверено 29 августа 2010 г.
  5. ^ Файл: pthreads4w-code-v3.0.0.zip — исходный код для pthreads4w v3.0.0.
  6. ^ Файл: pthreads4w-code-v2.11.0.zip — Источник pthreads4w v2.11.0.
  7. ^ см. http://locklessinc.com/articles/pthreads_on_windows , откуда он был первоначально получен.
  8. ^ «Глава 1: Введение в службы Windows для UNIX 3.5» . 5 декабря 2007 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: C5AF4DA0F6D7083A15B78AE69AA202EB__1712665980
URL1:https://en.wikipedia.org/wiki/Pthreads
Заголовок, (Title) документа по адресу, URL1:
pthreads - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)