28 Mart 2017 Salı

pthread_attr yapısı

Giriş
Şu satır dahil edilir.
#include <pthread.h>
Açıklaması şöyle
The attr argument points to a pthread_attr_t structure whose contents
are used at thread creation time to determine attributes for the new
thread; this structure is initialized using pthread_attr_init(3) and
related functions.  If attr is NULL, then the thread is created with
default attributes.
Bu yapı pthread_create() metoduna verilebilen parametrelerden bir tanesi. Thread'in davranışını ayarlamak için kullanılır.

Yapısı Nasıldır
Bu yapı işletim sistemine göre değişiklik gösterebilir. Örnek:
#define __SIZEOF_PTHREAD_ATTR_T 36

typedef union
{
    char __size[__SIZEOF_PTHREAD_ATTR_T];
    long int __align;
} pthread_attr_t;
Bu yapının alanlarını atamak için kullanılan metodlar şöyle. setX() metodlarına karşılık gelen getX() metodları var.

pthread_attr_init()
pthread_attr_setdetachstate()
pthread_attr_setguardsize()
pthread_attr_setinheritsched()
pthread_attr_setschedparam()
pthread_attr_setschedpolicy()
pthread_attr_setscope()
pthread_attr_setstack()
pthread_attr_setstacksize()

Ayrıca bu yapıyı yok etmek için pthread_attr_destroy() kullanılır.

pthread_attr_init metodu
Yapıyı default değerlerle doldurmak için şöyle yaparız.
pthread_attr_t thread_attr;
pthread_attr_init(&thread_attr);
pthread_attr_setscope metodu
Örnek ver

pthread_attr_setdetachstate metodu
Joinable thread için şöyle yaparız.
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

pthread_attr_setstack metodu
stack adresini atamak için kullanılır. Örnek ver

pthread_attr_setstacksize metodu
C++11 thread'lerinde yığıt boyutunu ayarlamak mümkün değil. Posix ile yapmak mümkün.

Yığıt boyutu şöyle alınır.
pthread_attr_t thread_attr;
size_t tmp_size=0;

pthread_attr_init(&thread_attr);

pthread_attr_getstacksize(&thread_attr , &tmp_size );
Yığıt boyutu şöyle atanır.
pthread_attr_t thread_attr;

pthread_attr_init(&thread_attr);

pthread_attr_setstacksize(&thread_attr , PTHREAD_STACK_MIN + 0x1000);
Thread belli bir yığıt ile şöyle başlatılır.
void* foo(void* arg){...} //Thread method
.
.
.
.
pthread_attr_t attribute;
pthread_t thread;

pthread_attr_init(&attribute);
pthread_attr_setstacksize(&attribute,1024); //Set stack size
pthread_create(&thread,&attribute,foo,0); //Create thread
pthread_join(thread,0); //Wait for thread to finish

pthread_attr_setinheritsched metodu
Şöyle yaparız.
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
pthread_attr_setschedpolicy metodu
Şöyle yaparız.
pthread_attr_setschedpolicy(&attr, SCHED_RR);
pthread_attr_setschedparam metodu
Şöyle yaparız.
struct sched_param sched;
memset( &sched, 0, sizeof( sched ) );
sched.sched_priority = priority;
pthread_attr_setschedparam(&attr, &sched);



Hiç yorum yok:

Yorum Gönder