Понятия Pthread в Linux - PullRequest
       9

Понятия Pthread в Linux

8 голосов
/ 21 июня 2011

У меня есть несколько вопросов о pthreads в linux:

  1. Это тот случай, когда pthread_t это тип данных, подобный int и char, указывающий, что мы определяем поток?
  2. Если да, то сколько это займет? 2 байта или 4 байта?
  3. Распределяет ли компилятор память для pthread_t thread1 сразу после этого оператора или ждет, пока он не вызовет pthread_create()?
  4. Как установить атрибуты потока и как они обычно используются?
  5. Можно ли передать только один аргумент в вызове pthread_create()? Если да, то как?

У меня на уме много таких вещей. Пожалуйста, не стесняйтесь предложить любые хорошие сайты или документы для чтения.

Ответы [ 4 ]

9 голосов
/ 21 июня 2011

Отвечая на вопросы один за другим, но не обязательно в том же порядке:

Является ли pthread_t типом данных, аналогичным int или char, указывающим, что мы определяем поток? Распределяет ли компилятор память для pthread_t thread1 сразу после этого предложения или ждет, пока не найдет вызов pthread_create()

pthread_t - это тип, похожий на int, и он создается при его определении, а не при вызове pthread_create. Во фрагменте:

pthread_t tid;
int x = pthread_create (&tid, blah, blah, blah);

это первая строка, которая создает переменную, хотя она не содержит ничего полезного до возврата из pthread_create.

Какой размер занимает pthread_t, 2 байта или 4 байта?

Тебя не должно волновать, сколько места требуется, равно как и заботы о том, сколько места занимает структура FILE. Вы должны просто использовать структуру, как задумано. Если вы действительно хотите знать, тогда sizeof ваш друг.

Любая хорошая информация о том, как установить атрибуты потока?

Если вы хотите использовать что-либо, кроме атрибутов по умолчанию, сначала нужно создать переменную атрибутов, а затем передать ее в вызов pthread_create.

Можем ли мы передать в функцию только один аргумент в функции pthread_create? Разве мы не можем отправить 2 или 3 аргумента в функции pthread_create() вызываемому потоку?

Хотя вам разрешено передавать один дополнительный параметр в поток, ничто не мешает вам сделать этот один параметр указателем на структуру, содержащую сотню различных вещей.


Если вы ищете информацию о том, как использовать pthreads, в конце поиска Google есть много материала, но я все равно предпочитаю версию «мертвого дерева»:

PThreads programming book, ISBN 13: 978-1-56592-115-3, ISBN 10: 1-56592-115-1

2 голосов
/ 21 июня 2011

сколько стоит

pthread_t использует sizeof pthread_t байт.

и мы можем передать только один аргумент в pthread_create функции не более одного? мы можем отправить 2 или 3 аргумента в функции pthread_create () вызываемому потоку?

Все, что вам нужно, это один аргумент. Все, что вы получите, это один аргумент. Это void *, поэтому вы можете передать указатель на как хотите. Например, структура, содержащая несколько значений.

У меня на уме много вещей, например, предложить какие-нибудь хорошие сайты или документы для чтения

Просмотрите справочные страницы pthread, онлайн или выбранную оболочку (man pthread, man pthread_create и т. Д.). Я начал читать некоторые основные слайды лекций (вот продолжение ).

1 голос
/ 21 июня 2011

pthread_t может быть любым числом байтов.Это может быть char, int, указатель или структура ... Но вам не нужно ни знать, ни заботиться.Если вам нужен размер для целей выделения, вы используете sizeof(pthread_t).Единственный тип переменной, который вы можете назначить, это другой pthread_t.

Компилятор может или не может распределять ресурсы, связанные с потоком, когда вы определяете pthread_t.Опять же, вам не нужно ни знать, ни заботиться, потому что вы обязаны вызывать pthread_join (или pthread_detach) в любом создаваемом вами потоке.Пока вы следуете правилам, система будет следить за тем, чтобы она не пропускала память (или любой другой ресурс).

Атрибуты, по общему признанию, немного неуклюжи.Они хранятся в объекте pthread_attr_t, который снова может быть представлен как целое число, указатель или вся структура.Вы должны инициализировать его с помощью pthread_attr_init и уничтожить его с помощью pthread_attr_destroy.Между этими двумя вы используете различные вызовы pthread_attr_... для установки или очистки атрибутов, а затем вы можете передать их как часть одного или нескольких вызовов pthread_create для установки атрибутов новых потоков.

Различные реализацииможет и будет обрабатывать все эти вещи по-разному.

LLNL имеет приличный набор вводной информации .

0 голосов
/ 21 июня 2011

Просмотрите файл pthread.h, чтобы получить больше информации.В моей системе pthread_t определяется как unsigned long int.Но я думаю, что это зависит от платформы, так как оно определено в bits/pthreadtype.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...