Здравствуйте.
В приведенном ниже коде в NPTL потоки планируются таким образом, что "работает" только первый поток, второй блокируется при попытке захватить мьюьекс.
Если раскомментировать строку pthread_yield, то все в порядке: работают оба потока (вместо pthread_yield можно, например, usleep).
В LinuxThread в подобного рода коде мне никогда не приходилось думать ни о каких yield-ах.
Для меня это загадка. Что не так? Подскажите, плиз.
Slackware 12.0 (2.6.21.5)
glibc 2.5 (соответственно и NPTL 2.5)
Спасибо.
---------------------------------------------------------
void *run(void *arg)
{
pthread_mutex_t *m = (pthread_mutex_t *)arg;
for (;;) {
pthread_mutex_lock(m);
printf("[%lu] Do something...\n", pthread_self());
pthread_mutex_unlock(m);
// pthread_yield();
}
return NULL;
}
int main()
{
pthread_mutex_t m;
pthread_t t1, t2;
pthread_mutex_init(&m, NULL);
pthread_create(&t1, NULL, run, (void *)&m);
pthread_create(&t2, NULL, run, (void *)&m);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
exit(0);
}


Ответ на:
комментарий
от execve

Ответ на:
комментарий
от fmj


Ответ на:
комментарий
от fmj

Ответ на:
комментарий
от execve

Ответ на:
комментарий
от jr_A

Ответ на:
комментарий
от jr_A

Ответ на:
комментарий
от fmj

Ответ на:
комментарий
от fmj

Ответ на:
комментарий
от execve


Ответ на:
комментарий
от cvv


Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от krum

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от krum

Ответ на:
комментарий
от tailgunner

Ответ на:
комментарий
от tailgunner

Ответ на:
комментарий
от tailgunner

Ответ на:
комментарий
от krum


Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от tailgunner

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от execve

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от mv

Ответ на:
комментарий
от tailgunner

Ответ на:
комментарий
от fmj

Ответ на:
комментарий
от watashiwa_daredeska

Ответ на:
комментарий
от watashiwa_daredeska


Ответ на:
комментарий
от idle

Ответ на:
комментарий
от watashiwa_daredeska

Ответ на:
комментарий
от idle

Ответ на:
комментарий
от watashiwa_daredeska

Ответ на:
комментарий
от watashiwa_daredeska

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Реализовать последовательно-параллельный запуск потоков (2017)
- Форум Структура epoll сервера (2010)
- Форум pthread_cond_wait помогите разобраться (2006)
- Форум Потоки. Не отрабатывается функция потока. С#. (2013)
- Форум ожидание завершения потока (2003)
- Форум pthread_cond_timedwait (2005)
- Форум Завершение потока: остается занятая память. (2009)
- Форум Утекает память при завершении потока. (2006)
- Форум Producer <-> Consumer (2008)
- Форум pthread_detach (2005)