поток posix в c: завершение 1 потока из другого путем передачи потоков - PullRequest
0 голосов
/ 20 февраля 2020

Так как я практикую потоки, я понимаю, что мы можем передавать значения потокам. Теперь мне интересно, могу ли я передать поток другому при создании. Нечто подобное;

int main(){
  pthread_t t1;
  pthread_t t2;

  pthread_create(&t1, NULL, counting, t2);
  pthread_create(&t2, NULL, waiting, &results);
//...
}

и моя функция выглядит так;

void* counting(void * arg) {
    pthread_t *t = arg;
    pthread_cancel(arg);
}

Я делаю это потому, что из потока counting я хочу завершить поток waiting, когда это сделано.

1 Ответ

2 голосов
/ 20 февраля 2020

У вас есть две проблемы:

1) Значение t2 не устанавливается, пока ваш второй вызов на pthread_create не вернется. Вам нужно изменить порядок двух pthread_create вызовов.

2) Поскольку поток принимает void *, вам нужно передать его void *. Бросать pthread_t к void * небезопасно. Обычным шаблоном является malloc новая структура, заполнение и передача указателя на вновь созданный поток. Вновь созданный поток может free структура, когда это сделано с ним. (Вы также можете привести &t2 к void *, просто убедитесь, что t2 остается действительным всегда, потому что в противном случае разыменовать указатель, переданный вами во вновь созданный поток, небезопасно.)

С этими двумя изменениями он должен работать.

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