반응형
pthread_t
- POSIX Thread API 이다
- 리눅스/유닉스에서 스레드 생성 및 관리 할 수 있다.
sched_param
- 스레드의 스케줄링을 제공한다
- 구조체의 priority 값으로 우선순의를 정해 스케줄링을 관리한다.
아래는 스레드 생성 및 스케줄링에 관한 소스 이다.
#include <pthread.h>
#define MAX_THREAD_IDX 20
#define THREAD_IDX_SOCKET_SERVER 0
#define P_OTH_PRIORITY 15
pthread_t rt_threadId[MAX_THREAD_IDX];
if ( create_pthread(&rt_threadId[THREAD_IDX_SOCKET_SERVER], 0, 0x8, Thread_Socket_Server, NULL, P_OTH_PRIORITY))
void *Thread_Socket_Server(void *vaArgs)
{
// example
}
int create_pthread( pthread_t *tid, unsigned int tid_num, uint32_t coremask, void *(*task_routine) (void *), void *arg, int pNum)
{
int retval;
pthread_attr_t pth_attr;
struct sched_param sched;
if ( pthread_attr_init(&pth_attr) )
printf("[sysError] main:pthread_attr_init - Thread_DIO_ROUTINE");
if ( pthread_attr_setinheritsched(&pth_attr, PTHREAD_EXPLICIT_SCHED) )
printf("[sysError] main:pthread_attr_setinheritsched - Thread_DIO_ROUTINE");
if ( pthread_attr_setschedpolicy(&pth_attr, SCHED_FIFO) )
printf("[sysError] main:pthread_attr_setschedpolicy - Thread_DIO_ROUTINE");
sched.sched_priority = pNum; //99~1, 0(SCHED_OTHER)
if ( pthread_attr_setschedparam(&pth_attr, &sched) )
printf("[sysError] main:pthread_attr_setschedparam - Thread_DIO_ROUTINE");
else
printf("Thread_DIO_ROUTINE priority = %d\n", sched.sched_priority);
retval = pthread_create( tid, &pth_attr, task_routine, arg);
return retval;
}
pthread_attr_init 는 thread 속성 개체를 초기화 한다.
pthread_attr_setinheritsched는 스레드 스케줄링 상속 속성을 얻거나 설정한다.
- THREAD_INHERIT_SCHED - 스레드를 생성할 때 생성하는 스레드의 스케줄링 속성을 상속받아 사용하며 스레드 속 성 객체 attr은 무시된다.
- PTHREAD_EXPLICIT_SCHED - 스레드를 생성할 때, 스레드 속성 객체를 사용하여 스레드를 생성한다.
pthread_attr_setschedpolicy는 스레드의 스케줄링 정책을 얻거나 설정한다.
- 지원되는 스케줄링 정책 값은 SCHED_FIFO, SCHED_RR, 그리고 SCHED_OTHER이며 헤데 파일 <sched.h>에 정의된다.
pthread_attr_setschedparam는 스레드 속성 오브젝트에서 스케줄링 매개 변수 속성 설정이다.
pthread_create로 thread, attr, function pointer, arg 를 넣으면 스레드가 완성된다.
반응형
'C' 카테고리의 다른 글
[C언어] sram open 및 설정 (0) | 2021.03.29 |
---|---|
[C언어] 비버퍼링 버퍼링 파일 함수 open, fopen 등 (2) | 2021.03.29 |
[C언어] POXIS termios RS485 인터페이스 제어 (1) | 2021.03.27 |
메모리 직접 접근 (0) | 2020.03.04 |