Priorty scheduling schedule işleminde bir sonraki process veya thread den hangisinin CPU yu kullanacağının karar verilmesidir. Priority bu genelde integer olan bir değer, her thread e önem sırasına göre atanır. Çalışmaya hazır olan yani READY STATE de bulunan threadlerden en yüksek priority e sahip olan seçilerek çalıştırılır. Buradaki mantık en yüksek öneme sahip olan thread işini ilk yapmalı, daha düşük öneme sahip threadler bekleyebilir. Genelde threadler prioritylerine göre sıralı bir queue veri yapısında tutulmaktadır böylece hep bir sonraki thread en yüksek öneme sahip thread olarak tutulmaktadır.
Figure 1: Burada 3 thread bulunmaktadır. A, B ve C sırasıyla priority leri de 1,2,3. İlk olarak thread C seçilecektir bir sonraki schedule işleminde.
Varsayalım ki threadlerimiz resourcelarını paylaşıyorlar. Böyle bir durumda aynı anda birden çok threadin aynı resource a erişmesini istemediğimizden mutex yapısını kullanıyoruz. Eğer bir thread resource u kullanıyorsa mutexi kitliyor, diğer thread kullanmak istediğinde mutex kilitliyse, mutex açılana kadar beklemeye başlıyor. Bu sayede birden çok thread aynı anda aynı resource a erişemiyor. Aşağıdaki figüre bakabiliriz.
Figure 2: Burada da 3 threadimiz var. Thread C nin priority si en yüksek olmasına rağmen A nın resourcunu beklediğinden, bir sonraki schedule işleminde B threadi işleme alınıyor.
Priority inversion durumunda yüksek priorty e sahip olan thread beklediğinden böyle bir problem oluşmaktadır. Bu problemi aşmak için Priority Donation (Önem sırası Bağışı) yapmakta.
Figure 3: Yukarıda bir priority donation örneği gösterilmektedir. Thread C, Thread A yı beklediğinden kendi yüksek priority sini A ya bağışlıyor, Thread A nın önem sırası yükseldiğinden bir sonraki schedule işleminde o çalıştırılıp, mutexi serbest bırakıyor.
Figure 4: Daha sonraki durumda tekrar Thread A nın prioritysi eski haline getiriliyor.
(CS.Berkeley)[http://www.cs.berkeley.edu/~kamil/teaching/sp04/pri/]



