The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Краткое описание pthread (threads )


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: threads,  (найти похожие документы)
Date: Wed, 9 May 2001 01:18:57 +0600 (TYUST) From: XMan Subject: Краткое описание pthread Ага, значит не я один такой без мана на pthread :)) Все ниже сказанное касается Linux ! Как в других системах - незнаю. Итак, pthread - это POSIX.1 вариант потоков выполнения (иногда называют нитями, нонасколько это правильно). SUN-овский вариант, кажется, thr или thread. Для работыпотоками определены N функций. В частности, pthread_create и pthread_exit. int pthread_create(pthread_t *ID, pthread_attr_t *ATTR, void *(*ROUTINE) (void *),*ARG) создает поток, используя аттрибуты потока ATTR (NULL - по умолчанию). Потоком являетсяvoid *ROUTINE(void *ARG), которой передается аргумент ARG. В ID возвращаетсяидентифицирующая поток. В книге написано, что в качестве ID можно подставлять int pthread_exit(void RET_VAL) завершение потока. Используется в функции-потоке ROUTINE при завершении работы. Далее, поскольку все потоки и сам родитель работают с одной областью памяти, то надоразделять доступ, чтобы они друг другу не мешали (например, при записи в однуту же переменную). Для этого обычно используется три разновидности блокировок: 1. взаимоисключающая блокировка. 2. условные переменные. 3. семафоры. Я использовал 1, остальное так и не пригодилось. Для работы с блокировками еть таки int pthread_mutex_init(pthread_mutex_t *LOCK,pthread_mutexattr_t *ATTR) - инициируетLOCK (переменная типа pthread_mutex_t). ATTR пока не используется, потомуNULL. int pthread_mutex_destroy(pthread_mutex_t *LOCK) - удаляет блокировку LOCK. int pthread_mutex_lock(pthread_mutex_t *LOCK) - блокирует остальные потоки. int pthread_mutex_unlock(pthread_mutex_t *LOCK) - разблокирует остальные потоки. int pthread_mutex_trylock(pthread_mutex_t *LOCK) - проверяет, можно ли блокироватьВозвращает -1, если кто-то уже блокирует остальных. Техника блокировок такая. Один поток вызывает ..._lock с аргументом LOCK и продолжаетВ это время еще один поток вызывает ..._lock с агрументом LOCK. При этомтех пор, пока первый поток не вызовет ..._unlock с аргументом LOCK, этот поток(нет возврата из функции ..._lock). Таким образом, блокируются не данные, апоток. блокировок в программе может быть несколько для более гибкого распределения.когда есть 2 блока данных, с каждым из которых работают потоки разныхимеет смысл создать 2 блокировки. Все вышеперечисленные функции имеют тип int, через который обычно возвращается код(-1). Это самая что ни на есть основа. Там еще много чего есть. В частности, аттрибутыприсоединенные и отсоединенные потоки. Но это лучше посмотреть в книге попод UNIX. ----------------------------------------------------------- Для закрытия подписки необходимо направить письмо по адресу mail-list@tura.ru с текстом "unsubscribe opentalk" в поле темы (subject) письма.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1.1, ShJohn (?), 06:34, 24/06/2004 [ответить]  
  • +/
    В общем не плохо. Если бы еще текст разборчиво был написан, без слияния пол слова на другие пол слова...
     
  • 1.2, Khizha (?), 18:32, 12/04/2005 [ответить]  
  • +/
    Ну очень краткое описание. Честно говоря толку на мой взгляд никакого
     
  • 1.3, Pavel (??), 12:14, 17/11/2006 [ответить]  
  • +/
    Толк есть. Я, например, могу уже создать, удалить и синхронизировать потоки. Но я хочу знать еще как остановить поток(pause) и продолжить его выполнение? А тут ничего про это нет :(
     
     
  • 2.4, Nil (?), 02:50, 05/05/2007 [^] [^^] [^^^] [ответить]  
  • +/
    А вот в этом и облом... Если в win есть Suspend&Resume то здесь вам придется использовать Mutex+Conditional value...
    Кста статья не только к Linux относится ) pthreads кросплатформенная либа, но не очень то удачная по сравнению с легковесными тридами солярки или бсд..
     

  • 1.5, Yoreck (ok), 13:48, 07/02/2008 [ответить]  
  • +/
    > pthreads кросплатформенная либа, но
    >не очень то удачная по сравнению с легковесными тридами солярки или
    >бсд..

    POSIX - это стандарт, в бсд работают те-же функции, хотя в качестве самой либы можно использовать libc_r, libpthread или libthr на выбор.

     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру