导航

    <#CACHE_INCLUDE_NAVBAR#>
« 華為三層交換機之間配置VLAN間路由從Select語句看Oracle查詢原理 »

linux下線程屬性常用操作

2010年12月4日 News 0条评论 0个引用

在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 標準中是可選的,而且僅用於實時線程。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Arwen Build 81206