Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2016, 17:42   #1
WolfEater
Пользователь
 
Регистрация: 15.02.2015
Сообщений: 21
По умолчанию Что происходит если для потока уже вызвали pthread_join?

Есть код функции pthread_join из glibc.
Подскажите:
1) Номер строки и что происходит, если для потока уже вызвали pthread_join?

Код:
#include <errno.h>
#include <stdlib.h>
#include <atomic.h>
#include "pthreadP.h"
#include <stap-probe.h>
static void
cleanup (void *arg)
{
 (void) atomic_compare_and_exchange_bool_acq ((struct pthread **) arg, NULL,
 THREAD_SELF);
}
int
pthread_join (pthread_t threadid, void **thread_return)
{
 struct pthread *pd = (struct pthread *) threadid;
 
 if (INVALID_NOT_TERMINATED_TD_P (pd))
 return ESRCH;
 
 if (IS_DETACHED (pd))
 
 return EINVAL;
 struct pthread *self = THREAD_SELF;
 int result = 0;
 LIBC_PROBE (pthread_join, 1, threadid);
 
 pthread_cleanup_push (cleanup, &pd->joinid);
 
 int oldtype = CANCEL_ASYNC ();
 if ((pd == self
 || (self->joinid == pd && (pd->cancelhandling & (CANCELING_BITMASK | CANCELED_BITMASK | EXITING_BITMASK | TERMINATED_BITMASK)) == 0))
 && !CANCEL_ENABLED_AND_CANCELED (self->cancelhandling))
 result = EDEADLK;
 else if (__builtin_expect (atomic_compare_and_exchange_bool_acq (&pd->joinid, self,NULL), 0))
 result = EINVAL;
 else
 lll_wait_tid (pd->tid);
 
 CANCEL_RESET (oldtype);
 
 pthread_cleanup_pop (0);
 if (__glibc_likely (result == 0))
 {
 pd->tid = -1;
 
 if (thread_return != NULL)
*thread_return = pd->result;
 __free_tcb (pd);
 }
 LIBC_PROBE (pthread_join_ret, 3, threadid, result, pd->result);
 return result;
}
WolfEater вне форума Ответить с цитированием
Старый 24.04.2016, 07:39   #2
WolfEater
Пользователь
 
Регистрация: 15.02.2015
Сообщений: 21
По умолчанию

Ну, люди добрые подскажите, пожалуйста, хотя бы в каких строчках вызывается функция pthread_join?
WolfEater вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уведомление если данные уже содержатся Евгений Таб Microsoft Office Excel 15 19.12.2014 15:17
происходит зацикливание если вводить не число Anakin Skyywalker Общие вопросы C/C++ 2 25.08.2014 01:50
Должно быть 3 потока. А диспетчер задач показывает, что потока создано 2 BEL9ILLI Общие вопросы Delphi 3 06.12.2011 20:26
если запись в реестре уже есть bymyny Общие вопросы Delphi 1 28.10.2010 19:20
Что происходит, если комп перегреваеться? Altera Компьютерное железо 35 02.06.2009 20:04