Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 44

Автор Π₯ьюз ΠšΠ°ΠΌΠ΅Ρ€ΠΎΠ½

Рис. 4.12. Π‘Ρ‚Π΅ΠΊΠΎΠ²Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΡ‹, сгСнСрированныС ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ

Ѐункция pthread_attr_getstacksize( ) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка, устанавливаСмый ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ attr опрСдСляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ считываСтся стандартный Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Π° стандартный Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² Π±Π°ΠΉΡ‚Π°Ρ…, coxpaняСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ stacksize. Π’ случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки.

Ѐункция pthread_attr_setstacksize() устанавливаСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ attr опрСдСляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ устанавливаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ stacksize содСрТит ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² Π±Π°ΠΉΡ‚Π°Ρ…. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 , Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС - ΠΊΠΎΠ΄ ошибки. Ѐункция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° stacksize оказываСтся мСньшС значСния PTHREAD_MIN_STACK ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ систСмный ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ. ВСроятно, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PTHREAD_STACK_MIN Π±ΡƒΠ΄Π΅Ρ‚ мСньшС минимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ p thread_attr_getstacksize(). ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка ΠΏΠΎΡ‚ΠΎΠΊΠ°, слСдуСт ΠΏΠΎΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ p thread_attr_getstacksize() Ρ€ Π°Π·ΠΌΠ΅Ρ€ ст Π΅ΠΊΠ° фиксируСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π»ΠΎΡΡŒ Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ фиксированного пространства стСка, установлСнного Π²ΠΎ врСмя компиляции.

Бинопсис

#include <pthread.h>

void pthread_attr_getstacksize(

const pthread_attr_t *restrict attr, void **restrict stacksize);

void pthread_attr_setstacksize(pthread_attr_t *attr, void *stacksize);

ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стСка ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ pthread_attr_setstackaddr() ΠΈ pthread_attr_getstackaddr(). Ѐункция pthread_attr_setstackaddr() для ΠΏΠΎΡ‚ΠΎΠΊΠ°, создаваСмого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr, устанавливаСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс стСка Ρ€Π°Π²Π½Ρ‹ΠΌ адрСсу, Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ stackaddr. Π­Ρ‚ΠΎΡ‚ адрСс stackaddr Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСсного пространства процСсса. Π Π°Π·ΠΌΠ΅Ρ€ стСка Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ мСньшС минимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ PTHREAD_STACK_MIN. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 , Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” ΠΊΠΎΠ΄ ошибки.

Ѐункция pthread_attr_getstackaddr () считываСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс стСка для ΠΏΠΎΡ‚ΠΎΠΊΠ°, создаваСмого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr. Π‘Ρ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΉ адрСс сохраняСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ stackaddr. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 , Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” ΠΊΠΎΠ΄ ошибки.

Бинопсис

#include <pthread.h>

void pthread_attr_setstackaddr(pthread_attr_t *attr,

void *stackaddr);

void pthread_attr_getstackaddr(const pthread_attr_t *restrict attr, void **restrict stackaddr);

Атрибуты стСка (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ мСстополоТСниС) ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Ѐункция pthread_attr_setstack() устанавливаСт ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΈ адрСс стСка для ΠΏΠΎΡ‚ΠΎΠΊΠ°, создаваСмого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс стСка устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ адрСсу, Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ stackaddr, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка β€” Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° stacksize. Ѐункция pthread_attr_getstack() считываСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ адрСс стСка для ΠΏΠΎΡ‚ΠΎΠΊΠ°, создаваСмого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 , Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” ΠΊΠΎΠ΄ ошибки. Если считываниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² стСка ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, адрСс Π±ΡƒΠ΄Π΅Ρ‚ записан Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ stackaddr, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€β€” Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ stacksize. Ѐункция pthread_setstack() выполнится Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° stacksize окаТСтся мСньшС значСния PTHREAD_STACK_MIN ΠΈΠ»ΠΈ прСвысит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π΅Π», опрСдСляСмый Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Бинопсис

#include <pthread.h>

void pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr,

size_t stacksize);

void pthread_attr_getstack(const pthread_attr_t *restrict attr,

void **restrict stackaddr, size_t stacksize);

Π’ листингС 4.3 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ установки Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка для ΠΏΠΎΡ‚ΠΎΠΊΠ°, создаваСмого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

// Листинг 4.3. ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка для ΠΏΠΎΡ‚ΠΎΠΊΠ°

//  с использованиСм смСщСния

pthread_attr_getstacksize(&SchedAttr, &DefaultSize) ;

if(DefaultSize < Min_Stack_Req){

SizeOffset = Min_Stack_Req - DefaultSize;

NewSize = DefaultSize + SizeOffset;

pthread_attr_setstacksize(&Attrl, (size_t)NewSize);

}

Π’ листингС 4.3 сначала ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° считываСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π—Π°Ρ‚Π΅ΠΌ, Ссли окаТСтся, Ρ‡Ρ‚ΠΎ этот Ρ€Π°Π·ΠΌΠ΅Ρ€ мСньшС ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ минимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка, вычисляСтся Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ сравниваСмыми Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ, послС Ρ‡Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой разности (смСщСниС) суммируСтся с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ стСка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ суммирования становится Π½ΠΎΠ²Ρ‹ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ стСка для этого ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•: установка Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ мСстополоТСния стСка ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ нСпСрСносимой. Π Π°Π·ΠΌΠ΅Ρ€ ΠΈ мСстополоТСниС стСка, устанавливаСмыС Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСподходящими для использования Π² качСствС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ мСстополоТСния стСка для Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

Установка Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² планирования ΠΈ свойств ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Подобно процСссам, ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нСзависимо ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ назначаСтся процСссору для выполнСния Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° опрСдСляСтся стратСгия планирования ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ процСссору. БтратСгия планирования ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° (ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²) Ρƒ станав Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

pthread_attr_setinheritsched()

pthread_attr_setschedpolicy()

pthread_attr_setschedparam()

Для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅ выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

pthread_attr_getinheritsched()

pthread_attr_getschedpolicy()

pthread_attr_getschedparam()

Бинопсис

#include <pthread.h>

#include <sched.h>

void pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);

void pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);

void pthread_attr_setschedparam(pthread_attr_t *restrict attr,

const struct sched_param *restrict param);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_attr_setinheritsched(), pthread_attr_setschedpolicy () ΠΈ pthread_attr_setschedparam() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для установки стратСгии планирования ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°. Ѐункция pthread_attr_setinheritsched() позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ планирования ΠΏΠΎΡ‚ΠΎΠΊΠ°: ΠΏΡƒΡ‚Π΅ΠΌ наслСдования ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°-создатСля ΠΈΠ»ΠΈ Π² соотвСтствии с содСрТимым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ inheritsched ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

PTHREAD_INHERIT_SCHED Атрибуты планирования ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ унаслСдованы ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°-создатСля, ΠΏΡ€ΠΈ этом Π»ΡŽΠ±Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ планирования, опрСдСляСмыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

PTHREAD_EXPLICIT_SCHED Атрибуты планирования ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ установлСны Π² соотвСтствии с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ планирования, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr.

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ inheritsched ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PTHREAD_EXPLICIT_SCHED, Ρ‚ΠΎ функция pthread_attr_setschedpolicy() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для установки стратСгии планирования, Π° функция pthread_attr_setschedparam() β€” установки ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°.

Ѐункция pthread_attr_setschedpolicy() устанавливаСт Ρ‡Π»Π΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠ° (Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr), Β«ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉΒ» Π·Π° ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ планирования ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ policy ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ <sched. h>.