pthread_arrt_XXXX(調度相關)

pthread_arrt_XXXX:
線程屬性相關:
linux

頭文件:
#include <rtl_sched.h> 安全


函數定義: async

設置/獲得cpu相關屬性: tcp

int pthread_attr_setcpu_np(pthread_attr_t *attr, int cpu);
int pthread_attr_getcpu_np(pthread_attr_t *attr, int *cpu); 函數

此函數爲不可移植的 RTLinux 擴展函數。在存在多個CPU的機器上,能夠指定線程在一特定CPU上運行。RTLinux的調度器並不猜想線程與CUP的對應關係。默認狀況下,線程在哪一個CPU上建立即在哪裏運行,但RTLinux仍是建議應用程序向調度器指定運行線程的CPU. spa

pthread_arrt_setcpu_np()函數修改了線程的屬性對象,attribute,這樣在pthread_create()建立線程時,線程就會被調度到由attr所定的CPU上去執行。在此以前線程屬性對象attr必須首先由pthread_attr_init()來進行初始化。
pthread_attr_getcpu_np()函數中,指針cpu將指向attr結構中的CPU id域。 操作系統

設置/獲得浮點運算支持屬性: 線程

int pthread_attr_setfp_np(pthread_attr_t *attr, int use_fp);
int pthread_attr_getfp_np(pthread_attr_t *attr, int *use_fp); 指針

此函數爲不可移植的 RTLinux 擴展函數。
參數:usr_fp爲0表明不容許浮點操做,非零值表示容許浮點操做。
      int*use_fp參數指向attr結構中的use_fp標識位。 code

建立線程:

int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

這函數是標準posix線程功能的RTLinux版本。
參數:attr指定建立線程的屬性,若爲NULL則使用默認的屬性。start_routine指定線程執行函數。

標準的線程屬性設置函數支持包括:
pthread_attr_setshedparam,
pthread_arrt_setdetachstate,
pthread_attr_setstacksize,
pthread_attr_setstackaddr.
另外還有兩具線程屬性設置函數:
pthread_attr_setcup_np,
pthread_attr_setfp_np.

pthread_attr_setstackaddr()容許用戶爲線程堆棧分配內存,所以線程可使用預先分配好的內存來在RT操做模式下被建立。這時,應該使用pthread_join來安全地同步釋放包括內存在內的線程資源。

產生週期實時線程:

int pthread_make_periodic_np(pthread_t thread, hrtime_t start_time, hrtime_t period);
此函數爲不可移植的RTlinux擴展。
此函數標識線程thread爲準備好ready狀態。線程將會在start_time時開始執行,並以period做爲週期循環執行。
建議配合使用clock_nanosleep()來產生週期線程。


刪除實時線程:

int pthread_delete_np(pthread_t thread);
此函數爲不可移植的 RTLinux 擴展函數。

等待停止線程:
int pthread_join(pthread_t thread, void **arg);

這一功能是標準POSIX線程功能的RTLinux版。
pthread_join將掛起調用線程,直至目標線程(thread)停止。若是arg爲非NULL值,則目標線程的返回值也將是(*arg).若是目標線程己經停止,pthread_join則會當即返回。若是該函數正確執行,那麼能夠肯定目標線程己經停止了。固然,這一調用將會用去多長時間,也是沒有上限的。

掛起實時線程的執行:

int pthread_suspend_np(pthread_t thread);

此函數爲不可移植的RTLinux擴展。此函數掛起線程,直至pthread_wakeup_np()被調用。
若是目標線程運行於另外一處理器,則不保證當即被掛起。
調用pthread_suspend_np(pthread_self())會當即執行。

注意:pthread_suspend_np可在信號或中斷處理中調用,但應當心。RTLinux硬信號處理(interrupt handlers)是在被中斷所打斷的任意的線程中的上下文中運行的。若是當中斷處理開始運行時,線程A正在運行,而且在中斷處理中調用了pthread_suspend_np函數,則調度器會保存線程A,而後運行其它線程。
若是是在linux的上下文中運行了中斷處理,並調用了pthread_suspend_np,則全部linux中的操做和進程都將被中止直到線程被喚醒。

喚醒實時線程:

int pthread_wakeup_np(pthread_t thread);

注意:這一函數能夠在中斷處理或線程中調用,但不能夠用內核中調用。調用這一函數時,若是被喚醒的線程有更高的優先級,則將會引發一個線程的轉換。被喚醒的線程將會當即掛起調用pthread_wakeup的線程。當沒有更高優先級的線程執行時,纔會繼續這個處理。

例如,有一個很是簡單的中斷,但在中斷後有很是複雜的處理。能夠將這個處理線程指定最高優先級。當中斷髮生,並執行pthread_wakeup後,將會當即轉換線程至處理線程。(應該在調用以前完成重要的硬件處理)

掛起當前線程直至下一週期:

int pthread_wait_np(void);
使用此函數前須調用pthread_make_periodic_np來使線程週期運行。

停止取消線程(不建議使用):

頭文件:
#include <rtl_signal.h>
#include <rtl_sched.h>

int pthread_cancel(pthread_t thread);

這個函數是標準的POSIX線程功能,然而也是POSIX線程規範中最薄弱的部分。緣由是:
pthread_cancel()將請求停止目標線程,而這停止或者會被不一樣步地執行,或者會因爲目標線程的cancel state而被忽略。若是目標線程處於disabled狀態,停止動做將會被掛起,直至線程達到enable狀態。若是目標線程處於enabled狀態,則其或者處於deferred或是asynchronous模式。deferred模式下將會推遲停止動做直至線程處於一個停止點(對應於線程的睡眠狀態)。語法很複雜。

停止動做有一個災難性的反作用。若是線程正在試圖停止,它將使用pthread_cleanup_push()來處理全部進棧的內容。然而,持有互拆信號量的被停止的線程並不被強制清除互斥鎖(mutex lock),所以會留下可怕的後果。所以建議不要使用此函數。

獲得Linux thread的線程標識符:

pthread_t pthread_linux(void);


向線程發送信號:
#include <rtl_signal.h>
#include <rtl_sched.h>

int pthread_kill(pthread_t thread,signo);


這是標準POSIX線程功能。pthread_kill發送信號signo給線程thread. 若是called on threads與calling on threads 或interrupt handler在同一處理器上運行,則pthread_kill是一個快速的,肯定性的功能。

pthread_kill()不管從signal handler或是從thread 或是從Linux kernel code訪問,都很安全。
pthread_kill()是向通用操做系統(linux)發送信號的主要方法之一。
調用:pthread_kill(pthread_linux(),RTL_LINUX_MIN_SIGNA+n),n是一個整數值 ,將會在Linux thread(我以爲此處應該是linux系統,即優先級最低的linux系統)中產生n號中斷的。

pthread_kill(pthread_linux(),RTL_SIG_SUSPEND_LINUX)將會給在the highest numbered 處理器上的linux thread發送一箇中斷,這中斷將會強制linux來掛起本身並通知硬件來忽略全部的non-RTlinux的中斷。
這一功能可使多處理器系統中的一個處理器專用於RTlinux. 使用RTL_SIG_RESTART_LINUX選項來恢復被掛起的linux threads.


在線程中容許使用浮點操做:

int pthread_setfp_np(pthread_t thread, int flag);

此函數爲不可移植的RTLinux擴展。用來在實時線程中容許或禁止使用浮點算術運算。flag爲0則不容許浮點操做,flag爲非0值則容許。 此函數不適於指定其它cpu上的線程,建議用pthread_arrt_setfp_np. 默認下,RT線程不容許進行浮點操做。

相關文章
相關標籤/搜索