Jak vytvorit vlakno s definovanou nice?

d.petr d.petr na post.cz
Pondělí Říjen 10 13:00:28 CEST 2011


Dobrý den,
marně se pokouším vytvořit vlákno funkcí pthread_create tak, aby se spustilo s požadovanou prioritou nice.
Při nastavování pthread_attr_setschedpolicy a pthread_attr_setschedparam sice lze určit např. policy==SCHED_RR a nějakou prioritu, to funguje, ale pro policy==SCHED_OTHER může být priorita jen 0 a "nice" není, jak nastavit (tedy já to neumím).
Po vytvoření vlákna by se v rodičovském vláknu asi dala použít funkce setpriority, jenže bych musel znát TID nového vlákna. Svůj TID dokáže zjistit vlákno voláním syscall (SYS_gettid), ale nenašel jsem nic, co by ho zjistilo "z venčí" (tzn. z rodičovského vlákna) s pomocí hodnoty pthread_t, kterou vrátí pthread_create.
Napadají mě zatím jen dva způsoby, jak na "nice":
1) Změnit nice rodičovského vlákna, pak teprv vytvořit nové vlákno a nechat "nice" podědit a pak ji zas v rodičovském vrátit. To se mi ale nelíbí a navíc to asi nejde vždycky (např. kdyby rodičovské vlákno bylo SCHED_RR).
2) Předat parametrem požadovanou hodnotu nice do vlákna při jeho vytváření a vlákno by si muselo po spuštění prioritu nastavit samo. To se mi ale také moc nelíbí.

Ani hledání po internetu nepřineslo výsledek, asi neumím dobře hledat. Mohl by mi někdo, prosím, poradit, kde dál pátrat?

PM


Další informace o konferenci Linux