Стандарт POSIX threads не позволяют идентифицировать потоки процесса снаружи (из другого процесса), и соответственно не позволяют управлять ими (например, приоритетами). В LinuxThreads это было возможно (так как там потоки больше напоминали по поведению процессы). В других Unix-ах, как правило, есть дополнительный родной API, который позволяет идентифицировать потоки и работать с ними снаружи. А вот как быть в Linux с ядром 2.6 и NPLT? Может, кто подскажет?Заранее благодарю!
>Стандарт POSIX threads не позволяют идентифицировать потоки процесса снаружи
>(из другого процесса),
>и соответственно не позволяют управлять ими (например, приоритетами). В LinuxThreads это
>было возможно (так как там потоки больше напоминали по поведению процессы).
>В других Unix-ах, как правило, есть дополнительный родной API, который позволяет
>идентифицировать потоки и работать с ними снаружи. А вот как быть
>в Linux с ядром 2.6 и NPLT? Может, кто подскажет?Хм... где Вы такие UNIX'ы видели? Конечно, возможно, что я плохо смотрел - но мне
смутно припоминается, что ни в HP-UX, ни в Solaris, ни в Tru64 подобной ботвы не водится.
>Хм... где Вы такие UNIX'ы видели? Конечно, возможно, что я плохо смотрел
>- но мне
>смутно припоминается, что ни в HP-UX, ни в Solaris, ни в Tru64
>подобной ботвы не водится.В Solaris есть семейство функций thr_xxxx, в AIX есть семейство функций thread_xxxx.
Обычно это набор из thread_self() + thread_getsched() + thread_setsched + (...)
В AIX-e оно требует установки переменных окружения, чтобы потоки в процессах отображались на потоки ядра, но это детали.
>В Solaris есть семейство функций thr_xxxx, в AIX есть семейство функций thread_xxxx.
>
>Обычно это набор из thread_self() + thread_getsched() + thread_setsched + (...)
>В AIX-e оно требует установки переменных окружения, чтобы потоки в процессах отображались
>на потоки ядра, но это детали.
Хм... про AIX ничего не знаю, а вот насчет Solaris:thr_setprio(3C)
NAME
thr_getprio, thr_setprio– access dynamic thread scheduling
SYNOPSIS
cc –mt [ flag... ] file...[ library... ]
#include <thread.h>
int thr_setprio(thread_t target_thread, int priority);
int thr_getprio(thread_t target_thread, int *priority);DESCRIPTION
The thr_setprio() function dynamically changes the priority of the thread specified by
target_thread *within the current process* to the priority specified by priority. By
default, threads contend for synchronization objects based on fixed priorities that
range from 0, the least significant, to 127. The target_thread will receive
precedence by libthread over lower priority threads with respect to
synchronization object contention.
Ключевое словосочетание - "within the current process".
>Хм... про AIX ничего не знаю, а вот насчет Solaris:
>Ключевое словосочетание - "within the current process".:-) Да, согласен, документацию нужно курить внимательней :-)
На Солярке еще не пробовал. На AIX-e точно работает, установлено опытным путем. Когда дойдет до Solaris, добавлю результаты в эту тему.