запрос о многопоточности - PullRequest
0 голосов
/ 10 ноября 2009

это может быть простой запрос.

когда мы создаем поток, мы передаем (void *) t в качестве аргумента функции PrintHello. Мы копируем значение в указателе threadid (перенося его в long) в tid, который снова является длинной переменной. я запутался с передачей параметров. это передача по ссылке или передача по значению. все это правильно? (value *)t. какое значение он передает точно?

long t;
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);

void *PrintHello(void *threadid)
{
   long tid;
   tid = (long)threadid;

Пожалуйста, помогите мне избежать моего замешательства: (

Ответы [ 2 ]

5 голосов
/ 10 ноября 2009

То, что вы делаете, это передача по значению. Это нормально, если sizeof(T) <= sizeof(void*) для типа T, который вы пытаетесь передать.

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

T* t = new T(someValue);
rc = pthread_create(&threads[t], NULL, PrintHello, (void*)t);
0 голосов
/ 10 ноября 2009

Это должно быть передано по ссылке.

Убедитесь, что параметр u pass должен быть глобальным или динамически распределенным для доступа к функции потока.

Вы передаете адреса, поэтому напишите это ...

rc = pthread_create (& threads [t], NULL, PrintHello, (void *) & t);

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