URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5459
[ Назад ]

Исходное сообщение
"Управление потоками одного процесса из другого процесса"

Отправлено andrew_sch , 28-Май-06 11:26 
Стандарт POSIX threads не позволяют идентифицировать потоки процесса снаружи (из другого процесса), и соответственно не позволяют управлять ими (например, приоритетами). В LinuxThreads это было возможно (так как там потоки больше напоминали по поведению процессы). В других Unix-ах, как правило, есть дополнительный родной API, который позволяет идентифицировать потоки и работать с ними снаружи. А вот как быть в Linux с ядром 2.6 и NPLT? Может, кто подскажет?

Заранее благодарю!


Содержание

Сообщения в этом обсуждении
"Управление потоками одного процесса из другого процесса"
Отправлено DeadMustdie , 29-Май-06 21:06 
>Стандарт POSIX threads не позволяют идентифицировать потоки процесса снаружи
>(из другого процесса),
>и соответственно не позволяют управлять ими (например, приоритетами). В LinuxThreads это
>было возможно (так как там потоки больше напоминали по поведению процессы).
>В других Unix-ах, как правило, есть дополнительный родной API, который позволяет
>идентифицировать потоки и работать с ними снаружи. А вот как быть
>в Linux с ядром 2.6 и NPLT? Может, кто подскажет?

Хм... где Вы такие UNIX'ы видели? Конечно, возможно, что я плохо смотрел - но мне
смутно припоминается, что ни в HP-UX, ни в Solaris, ни в Tru64 подобной ботвы не водится.


"Управление потоками одного процесса из другого процесса"
Отправлено andrew_sch , 30-Май-06 10:54 

>Хм... где Вы такие UNIX'ы видели? Конечно, возможно, что я плохо смотрел
>- но мне
>смутно припоминается, что ни в HP-UX, ни в Solaris, ни в Tru64
>подобной ботвы не водится.

В Solaris есть семейство функций thr_xxxx, в AIX есть семейство функций thread_xxxx.
Обычно это набор из thread_self() + thread_getsched() + thread_setsched + (...)
В AIX-e оно требует установки переменных окружения, чтобы потоки в процессах отображались на потоки ядра, но это детали.


"Управление потоками одного процесса из другого процесса"
Отправлено DeadMustdie , 30-Май-06 13:36 
>В 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".


"Управление потоками одного процесса из другого процесса"
Отправлено andrew_sch , 30-Май-06 13:42 

>Хм... про AIX ничего не знаю, а вот насчет Solaris:
>Ключевое словосочетание - "within the current process".

:-) Да, согласен, документацию нужно курить внимательней :-)
На Солярке еще не пробовал. На AIX-e точно работает, установлено опытным путем. Когда дойдет до Solaris, добавлю результаты в эту тему.