歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> linux下線程屬性常用操作

linux下線程屬性常用操作

日期:2017/2/25 10:38:10   编辑:Linux教程

  在linux中,可以使用pthread_attr_t結構修改線程默認屬性,並把這些屬性與創建的線程聯系起來。首先調用pthread_attr_init初始化pthread_attr_t結構,使pthread_attr_t結構所包含的內容就是操作系統實現支持的線程所有屬性的默認值。然後,可以調用其他函數對想修改的個別屬性進行修改。

  1.線程屬性的初始化(若對屬性操作,必先初始化),去初始化。

  #include <pthread.h>

  int pthread_attr_destroy(pthread_attr_t *attr);

  int pthread_attr_init(pthread_attr_t *attr);

  返回值:若成功返回0,否則返回錯誤編號。

  2.獲取分離狀態/設置分離屬性

  #include <pthread.h>

  int pthread_attr_getdetachstate(const pthread_attr_t *attr,int *detachstate);

  int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

  返回值:若成功返回0,否則返回錯誤編號。

  設置PTHREAD_CREATE_DETACHED,以分離狀態啟動線程;或設置為PTHREAD_CREATE_JOINABLE,默認正常啟動線程,應用程序可以獲取線程的終止狀態。

  3.獲取/設置調度策略

  #include <pthread.h>

  int pthread_attr_getschedpolicy(const pthread_attr_t *restrict attr,

  int *restrict policy);

  int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);

  返回值:若成功返回0,否則返回錯誤編號。

  The supported values of policy shall include SCHED_FIFO, SCHED_RR, and SCHED_OTHER, which are defined in the <sched.h> header.

  POSIX 標准指定了三種調度策略:先入先出策略 (SCHED_FIFO)、循環策略 (SCHED_RR) 和自定義策略 (SCHED_OTHER)。SCHED_FIFO 是基於隊列的調度程序,對於每個優先級都會使用不同的隊列。SCHED_RR 與 FIFO 相似,不同的是前者的每個線程都有一個執行時間配額。

  SCHED_FIFO 和 SCHED_RR 是對 POSIX Realtime 的擴展。SCHED_OTHER 是缺省的調度策略。

  SCHED_FIFO

  如果調用進程具有有效的用戶 ID 0,則爭用范圍為系統 (PTHREAD_SCOPE_SYSTEM) 的先入先出線程屬於實時 (RT) 調度類。如果這些線程未被優先級更高的線程搶占,則會繼續處理該線程,直到該線程放棄或阻塞為止。對於具有進程爭用范圍 (PTHREAD_SCOPE_PROCESS)) 的線程或其調用進程沒有有效用戶 ID 0 的線程,請使用 SCHED_FIFO。SCHED_FIFO 基於 TS 調度類。

  SCHED_RR

  如果調用進程具有有效的用戶 ID 0,則爭用范圍為系統 (PTHREAD_SCOPE_SYSTEM)) 的循環線程屬於實時 (RT) 調度類。如果這些線程未被優先級更高的線程搶占,並且這些線程沒有放棄或阻塞,則在系統確定的時間段內將一直執行這些線程。對於具有進程爭用范圍 (PTHREAD_SCOPE_PROCESS) 的線程,請使用 SCHED_RR(基於 TS 調度類)。此外,這些線程的調用進程沒有有效的用戶 ID 0。

  SCHED_FIFO 和 SCHED_RR 在 POSIX 標准中是可選的,而且僅用於實時線程。

  4.獲取/設置

Copyright © Linux教程網 All Rights Reserved