1. 程式人生 > >linux執行緒的建立和屬性pthread_attr_t設定

linux執行緒的建立和屬性pthread_attr_t設定

Posix執行緒中的執行緒屬性pthread_attr_t主要包括detach屬性、policy屬性、優先順序、繼承屬性、堆疊地址、scope屬性、堆疊大小。在pthread_create中,把第二個引數設定為NULL的話,將採用預設的屬性配置。

  1. detach屬性:__detachstate,如果設定為PTHREAD_CREATE_DETACHED 則新執行緒不能用pthread_join()來同步,且在退出時自行釋放所佔用的資源。預設為PTHREAD_CREATE_JOINABLE狀態。這個屬性也可以線上程建立並執行以後用pthread_detach()來設定,而一旦設定為PTHREAD_CREATE_DETACH狀態(不論是建立時設定還是執行時設定)則不能再恢復到PTHREAD_CREATE_JOINABLE狀態。使用pthread_attr_setdetachstate()
    設定
  2. policy屬性:__schedpolicy,表示新執行緒的排程策略,主要包括SCHED_OTHER(正常、非實時)、SCHED_RR(實時、輪轉法)和SCHED_FIFO(實時、先入先出)三種,預設為SCHED_OTHER,後兩種排程策略僅對超級使用者有效。執行時可以用過pthread_attr_setschedpolicy ()來改變。
  3. 優先順序:__schedparam,一個struct sched_param結構,目前僅有一個sched_priority整型變量表示執行緒的優先順序。這個引數僅當排程策略為實時(即SCHED_RR或SCHED_FIFO)時才有效,並可以在執行時通過pthread_setschedparam()
    函式來改變,預設為0。
  4. 繼承屬性:__inheritsched,有兩種值可供選擇:PTHREAD_EXPLICIT_SCHED和PTHREAD_INHERIT_SCHED,前者表示新執行緒使用顯式指定排程策略和排程引數(即attr中的值),而後者表示繼承呼叫者執行緒的值。通過pthread_attr_setinheritsched()設定,預設為PTHREAD_EXPLICIT_SCHED
  5. scope屬性:__scope,表示執行緒間競爭CPU的範圍,也就是說執行緒優先順序的有效範圍。POSIX的標準中定義了兩個值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示與系統中所有執行緒一起競爭CPU時間,後者表示僅與同進程中的執行緒競爭CPU。通過pthread_attr_setscope()
    設定

建立執行緒前先呼叫pthread_attr_init()進行執行緒屬性初始化

然後設定各個屬性

設定好屬性後呼叫拉起執行緒

int pthread_create(pthread_t *tidp,

const pthread_attr_t *attr,

(void*)(*start_rtn)(void*),

void *arg);

tidp指向執行緒控制代碼的指標

attr執行緒屬性結構體

start_rtn執行緒函式指標

arg執行緒函式的引數

相關推薦

linux執行建立屬性pthread_attr_t設定

Posix執行緒中的執行緒屬性pthread_attr_t主要包括detach屬性、policy屬性、優先順序、繼承屬性、堆疊地址、scope屬性、堆疊大小。在pthread_create中,把第二個引數設定為NULL的話,將採用預設的屬性配置。 detach屬性:__de

linux執行建立銷燬

基本函式介紹 建立執行緒 int ptread_create(pthread_t *thread, const pthread_att_t *attr, void * (*

Linux 執行 ID 設定名字

標頭檔案要有: #include <unistd.h> #include <pthread.h> #include <sys/syscall.h> #include <sys/prctl.h> 程式:     prin

【JAVA】執行建立匿名內部類

前言 看多執行緒時,發現一些匿名內部類的東西,然後就來總結一下。   1.繼承Thread類 在類上實現匿名內部類 public class Demo1 { public static void main(String[] args) { Thread t = new T

C#_多執行建立使用

1.在需要建立執行緒的方法中新增:new Thread(方法名).Start("資料"); 2.建立需要在新執行緒執行的方法: private void 方法名(object obj) { .....

Linux執行建立以及回撥函式的使用

這段時間要實現一下使用深度學習分類來輔助現有演算法。主要就是在主程式有需求的時候呼叫深度學習方法,並保證程式不卡死。然後等深度學習演算法處理完成,再返回處理結果。 下面貼出相關簡化後的程式碼。記錄一下。 CDLProcess.h #include <iostream&

java多執行與高併發庫應用(二)執行建立定時任務Timer

1、建立執行緒的兩種方式, 通過start, 執行run方法。 第一種實現runnable, 定義類實現Runnable介面 重寫Runnable介面中的run方法 通過Thread建立執行緒物件 將Runnable介面的子類物件作為實際引數傳遞

執行建立六中狀態

多執行緒有三種建立方法 1.看程式碼 用thread的子類建立 方式1 //用Thread子類的方法 Thread thread = new Thread() { //抽象run方法

java中的執行建立使用

Java中實現多執行緒有兩種途徑:繼承Thread類或者實現Runnable介面。Runnable是介面,建議用介面的方式生成執行緒,因為介面可以實現多繼承,況且Runnable只有一個run方法,很適合繼承。在使用Thread的時候只需繼承Thread,並且new一個例項出

Python多執行執行建立終止

python主要是通過thread和threading這兩個模組來實現多執行緒支援。python的thread模組是比較底層的模組,python的threading模組是對thread做了一些封裝,可以更加方便的被使用。但是python(cpython)由於GIL的存在無法

執行:執行建立3種方式(一)

執行緒  鎖Synchronized  搞明白 執行緒 鎖和多執行緒系列 1.執行緒建立 執行緒建立常見的三種方式: 繼承Thread類 實現Runnable介面

Linux執行fork

參考這個部落格就可以了: int pthread_atfork(void (*prepare)(void), void (*parent)(void),void (*child)(void));  //執行緒建立程序     用pthread_atfork函式

java之執行建立的兩種方式,六種狀態匿名內部類建立子類或實現類物件

一.匿名內部類建立子類或實現類物件 new Test(){} 相當於建立了Test類的子類物件 並且沒有類名 建立介面實現類 new 介面名() {};介面實現類的物件 注意 : new 後邊是類或者介面名 大括號內是類或者介面中的方法 public

linux執行的高階屬性

一次性初始化: 用途:  有些事需要且只能執行一次(比如互斥量初始化)。通常當初始化應用程式時,可以比較容易地將其放在main函式中。但當你寫一個庫函式時,就不能在main裡面初始化了,你可以用靜態初始化,但使用一次初始(pthread_once_t)會比較容易些。 用法: 

JMeter命令模式下動態設定執行持續時間等動態傳參

背景: 1.當通過JMeter的影象化介面執行效能壓測或者場景時候,JMeter介面很容易導致介面卡死或者無響應的情況(20個執行緒數就會卡死) 現象如下: 解決方案: jmeter -n -t D:\apache-jmeter-3.0\bin\log.j

建立執行——_beginthread _beginthreadex【方法2】

並不是Windows標準API,建立執行緒函式,該函底層呼叫CreateThread。 標頭檔案 #include <process.h> 函式原型 unsigned long _beginthread( void(_cdecl *st

執行程序的關係 ----執行建立有幾種方式

程序是一個應用程式在處理機上的一次執行過程,他是一個動態的概念 ,執行緒是程序的一部分是程式執行的最小單元 一個程序中有多個執行緒 個人理解 :             

執行建立同級目錄上下級目錄

人類進步的唯一動力就是懶,而程式碼就是幫助人們去做一些人們懶得做的事情,比如一些重複性的工作。看過我之前的部落格的大佬們都知道,我已經懶到一種境界了。 今天在整理檔案的時候,我發現我需要幾十個資料夾,在裡面,還有子資料夾,當然,我是懶得一個一個去建立的。既然自己懶得做,就寫

多程序與多執行(五)--Linux 執行模型的比較:LinuxThreads NPTL(轉)

當 Linux 最初開發時,在核心中並不能真正支援執行緒。但是它的確可以通過 clone() 系統呼叫將程序作為可排程的實體。這個呼叫建立了呼叫程序(calling process)的一個拷貝,這個拷貝與呼叫程序共享相同的地址空間。LinuxThreads 專案使用這個呼叫來完全在使用者空間模擬對執行緒的支援

三十七、Linux 執行——執行清理控制函式、程序執行啟動方式比較、執行的狀態轉換

37.1 執行緒清理和控制函式 1 #include <pthread.h> 2 3 void pthread_cleanup_push(void (* rtn)(void *), void *arg); 4 void pthread_cleanup_pop(int execute);