簡體   English   中英

我可以使文件描述符限制為每個線程嗎?

[英]Can I make the file descriptor limit a per-thread limit?

我正在Centos-6 x86_64機器上工作。 默認情況下,如果我啟動一個進程,它可以打開1024個文件(包括標准的輸入/輸出/錯誤流),並且我可以使用setrlimit() API擴展該限制。

我的問題是,如果我在進程中啟動線程,則它共享此限制。 例如,假設我正在運行一個打開1024個描述符的父進程,然后如果我使用pthread_create()創建一個線程,則它無法打開單個文件,因為其父級已經打開了1024個描述符並消耗了全部限制。

我想使子線程(不是子進程)能夠像父進程一樣打開1024個文件。 我知道將父級文件描述符限制擴展到2048將使子級可以打開1024個文件。 但是我想讓父母和孩子有單獨的限制,而不是共同的限制。

我期望pthread_attr_t中的某些屬性可適用於子線程具有單獨的文件表。

在Linux上,

unshare(CLONE_FILES);

(如果成功)將為當前線程提供自己的filedescriptor表。

它應該可以從已經產生的內核支持(我知道的所有Linux pthreads實現)pthread中使用。

似乎沒有甚至可以設置的非便攜式pthread屬性,但是您可以使用上述方法包裝pthread_create ,從而添加此功能。

如果您在Linux上進行自己的線程處理,則可以將CLONE_FILES標志直接傳遞給clone 否則,您將需要讓wrapped_pthread_create等待,直到孩子進行了unshare調用(如果調用失敗,則取消並獲取線程)。

暫無
暫無

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

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