簡體   English   中英

如何在Linux中設置線程的屬性?

[英]How to set the attributes of threads in Linux?

現在,我想在程序中創建三個進程,每個進程中都有多個線程。
每個線程都是無限任務,可以休眠並定期喚醒。 此外,該過程還有一些任務要做。
我的問題是:

1)我需要將線程設置為分離線程嗎? 如果我將線程設置為分離線程,則它們似乎無法運行! 但是,如果線程是可連接的,則該進程必須等待線程退出,並且無法完成自己的工作! 我應該選擇哪一個?

2)時間表政策的范圍是什么? 我的意思是,如果我將調度策略設置為FIFO,那么所有進程中的所有線程都由FIFO策略調度嗎? 還是僅使用此屬性設置的線程是由該策略調度的?

3)線程優先級的范圍是什么? 線程優先級僅在單個進程中有用,而在另一個進程中,存在另一組線程優先級。 而且他們不會互相感染???

多謝您的協助! 謝謝!

已分離或已聯接:這取決於您所需的需求類型。

如果您希望主可執行線程(正在生成新線程)需要繼續工作,而無需等待生成的線程返回值,則可以使用DETACH。

如果需要主要的可執行線程,則只需等待返回值,而無需自己執行任何其他任務。 您可以使用JOIN。

創建線程后,除非調用了屬性更改,否則它將使用默認的調度策略,然后再調用pthread_create。 同樣在創建之后,可以動態地更改調度策略。 注意:調度策略會影響具有相同優先級的線程。

優先級:您可以使用pthread_setschedparam更改優先級(也用於調度策略)。 但是,在Linux中線程也是一個輕量級的過程。 因此,所有線程都被優先考慮在整個進程級別,而不是在每個進程內。

我只回答第一個問題:

無需創建分離的線程,因為您可以在主過程結束時簡單地將它們加入。

要創建分離的線程,您應該首先創建一個屬性,然后將其用作pthread_create的參數

pthread_t thread1;
pthread_attr_t attr;

int chk;

chk = pthread_attr_init(&attr);
printf("attr_init: %d\n",chk);

chk = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
printf("attr_setdetachstate: %d\n",chk);

chk = pthread_create(&thread1, &attr, function, NULL);

(1)您有編碼錯誤。 分離的線程會像其他所有事件一樣獲得時間片。 如果它沒有運行,那么這就是您正在做的事情。 您應該在另一個問題中發布threadfunc和創建線程的函數。

在不知道自己在做什么的情況下,無法說出線程應該是可連接的還是分離的。 可連接線程的主要好處是您知道它們何時完成,並且可以檢查返回數據。 如果這些對您不重要,則使它們可連接並沒有真正的優勢-除此之外,由於它們是默認設置,因此創建起來稍微容易一些。

如果您不想阻塞pthread_join,則可以采取一些策略。 您的線程可以在死之前設置開關,可以使用條件變量,還可以有一個單獨的線程來連接死線程,依此類推。 同樣,不可能知道針對您的特定案例的最佳策略。

(2&3)線程繼承了創建它的線程的調度策略和優先級,除非您特別更改,否則它們將保持這種狀態。 一個進程中線程的策略/優先級與任何其他進程都不直接相關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM