Evre Öznitelikleri
Önceki POSIX Evreleri Sonraki
Evre Öznitelikleri
Evreler oluşturulmaları sırasında aldıkları bir miktar özelliğe sahip olabilir. Bu, pthread_attr_t türündeki bir öznitelik evre öznitelik nesnesinin doldurulması, ardından da pthread_create işlevine ikinci argüman olarak aktarılmasıyla olur. NULL aktarmak bütün özniteliklerine öntanımlı değerler atanmış bir evre öznitelik nesnesi aktarmakla eşdeğerdir.
Öznitelik nesnelerine sadece yeni bir evre oluşturulacağı zaman başvurulur. Aynı öznitelik nesnesi bir çok evrenin oluşturulmasında kullanılabilir. pthread_create çağrıldıktan sonra bir öznitelik nesnesinin değiştirilmesi önceden oluşturulan bir evrenin özniteliklerini değiştirmez.
int pthread_attr_init
(pthread_attr_t *öznitelik)
işlev
pthread_attr_init öznitelik evre öznitelik nesnesini hazırlar ve özniteliklerini öntanımlı değerlerle doldurur. (Öntanımlı değerler her öznitelik için aşağıda listelenmiştir.)
Her isim özniteliği (bütün özniteliklerin listesi için aşağı bakınız) pthread_attr_setisim işlevi ile tek tek belirlenebilir ve pthread_attr_getisim işlevi ile değeri alınabilir.
int pthread_attr_destroy
(pthread_attr_t *öznitelik)
işlev
pthread_attr_destroy öznitelik ile gösterilen özellik nesnesini ilişkili bütün kaynakları serbest bırakarak yok edebilir. öznitelik tanımlanmamış bir durumda bırakılır ve tekrar hazırlanıncaya kadar herhangi bir POSIX evre işlevi ile kullanmamanız gerekir.
int pthread_attr_setattr
(pthread_attr_t *nesne,
 int             değer)
işlev
nesne ile gösterilen öznitelik nesnesinin içindeki öznitelik özelliğine değer değerini verir. Olası öznitelikler ve alabilecekleri değerler listesi için aşağıya bakınız.
Başarı halinde, bu işlevler 0 döndürür. Eğer değer değiştirilen öznitelik için anlamlı değilse, EINVAL hata kodunu döndürürler. Bazı işlevlerin başka hata kipleri vardır; aşağıya bakınız.
int pthread_attr_getattr
(pthread_attr_t *nesne,
 int            *değer)
işlev
nesne içindeki öznitelik özelliğinin geçerli ayarlarını değer ile gösterilen değişken içinde saklar.
Bu işlevler her zaman 0 döndürür.
Aşağıdaki evre öznitelikleri desteklenmektedir:
detachstate
Evrenin birleşimci bir durumda mı (PTHREAD_CREATE_JOINABLE değeri) yoksa ayrık durumda mı (PTHREAD_CREATE_DETACHED) oluşturulacağını seçer. Öntanımlı olan PTHREAD_CREATE_JOINABLE değeridir.
Birleşimci durumunda, başka bir evre, evrenin sonlanışıyla eşzamanlanabilir ve pthread_join kullanarak kendi sonlanma kodunu kurtarabilir, fakat bazı evre özkaynakları evre sonlandıktan sonra ayrılmış kalır ve ancak başka bir evre o evre üzerinde pthread_join uygularsa geri alınabilir.
Ayrık durumda, evre sonlandığında özkaynakları anında serbest bırakılır, fakat evrenin sonlandırılışında eşzamanlamak için pthread_join kullanılamaz.
Birleşimci durumda oluşturulan bir evre daha sonra pthread_detach ile ayrık evreye konulabilir.
schedpolicy
Evre için zamanlama ilkesini seçilir: SCHED_OTHER (normal, gerçek zamanlı olmayan zamanlama), SCHED_RR (gerçek zamanlı, döner turnuva) veya SCHED_FIFO (gerçek zamanlı, ilk giren ilk çıkar). Öntanımlı olan SCHED_OTHER ilkesidir.
Gerçek zamanlı zamanlama ilkeleri olan SCHED_RR ve SCHED_FIFO ilkeleri sadece süper kullanıcı haklarına sahip süreçler için mevcuttur. Eğer yetkisizken gerçek zamanlı bir ilke kurmayı denerseniz pthread_attr_setschedparam işlevi başarısız olur ve ENOTSUP hatasını döndürür.
Bir evre oluşturulduktan sonra, zamanlama ilkesi pthread_setschedparam ile değiştirilebilir.
schedparam
Evre için zamanlama parametresini (zamanlama önceliği) değiştirir. Öntanımlı değeri 0'dır.
Bu özellik zamanlama ilkesi SCHED_OTHER ise anlamlı değildir; bu sadece gerçek zamanlı SCHED_RR ve SCHED_FIFO ilkelerini ilgilendirir.
Bir evre oluşturulduktan sonra, zamanlama önceliği pthread_setschedparam ile değiştirilebilir.
inheritsched
Yeni oluşturlan evre için zamanlama ilkesinin ve parametresinin schedpolicy ve schedparam özelliklerinin değerleriyle mi (PTHREAD_EXPLICIT_SCHED değeri) yoksa üst evreden miras alınarak mı (PTHREAD_INHERIT_SCHED değeri) belirleneceğini seçer. Öntanımlı değer PTHREAD_EXPLICIT_SCHED değeridir.
scope
Oluşturulan evre için zamanlama çekişme kapsamını seçer. Öntanımlı değeri PTHREAD_SCOPE_SYSTEM'dir ve bu, evrelerin işlemci zamanı için makinede çalışan bütün süreçlerle çekişmesi anlamına gelir. Evre öncelikleri makinede çalışan diğer bütün süreçlere göre yorumlanır. Diğer bir olasılık, PTHREAD_SCOPE_PROCESS olup bu, evrelerin zamanlama çekişmesinin sadece çalışan sürecin evreleri arasında gerçekleştiği anlamına gelir: evre öncelikleri sürecin diğer evrelerine göre yorumlanır, diğer süreçlerin önceliklerine bakılmaz.
PTHREAD_SCOPE_PROCESS LinuxThreads'de desteklenmemektedir. Eğer kapsamı bu değer olarak ayarlamaya çalışırsanız, pthread_attr_setscope başarısız olur ve ENOTSUP döndürür.
stackaddr
Uygulama yönetimli yığıt için adres sağlar. Yığıtın büyüklüğü en az PTHREAD_STACK_MIN olmalıdır.
stacksize
Evre için oluşturulan yığıtın büyüklüğünü değiştirir. Değer yığıt için asgari büyüklüğü bayt cinsinden tanımlar.
Eğer değer sistemin azami yığıt büyüklüğünü aşarsa veya PTHREAD_STACK_MIN değerinden küçükse, pthread_attr_setstacksize başarısız olur ve EINVAL döndürür.
stack
Yeni evreye, kullanmak için uygulama yönetimli yığıta hem adresi hem de büyüklüğü sağlar. Bellek alanının tabanı, bayt cinsinden stacksize büyüklüğündeki stackaddrdir.
Eğer stacksize değeri PTHREAD_STACK_MIN değerinden az ise veya sistemin azami yığın büyüklüğünden büyükse veya stackaddr değeri uygun hizalamadan yoksunsa, pthread_attr_setstack başarısız olur ve EINVAL döndürür.
guardsize
Evre yığıtının koruma alanının asgari büyüklüğünü bayt cinsinden değiştirir. Varsayılan büyüklük tek sayfadır. Eğer bu değer belirtilirse, en yakın sayfa büyüklüğüne yuvarlanır. Değer 0'a eşitlenirse, bu evre için koruma alanı oluşturulmaz. Koruma alanı için ayrılan yer yığıt taşmalarını yakalamak için kullanılır. Bu nedenle, yığıt üzerinde büyük yapılar ayrılacağında, yığıt taşmalarını yakalamak için daha büyük koruma alanı gerekebilir.
Çağrıcı kendi yığıtlarını yönetiyorsa (eğer stackaddr özelliği belirtildiyse), o zaman guardsize özelliği dikkate alınmaz.
Eğer değer stacksize değerini aşarsa, pthread_atrr_setguardsize başarısız olur ve EINVAL döndürür.
Önceki Üst Ana Başlık Sonraki
Basit Evre İşlemleri Başlangıç İptaletme
Bir Linux Kitaplığı Sayfası