簡體   English   中英

Linux中的並發系統調用

[英]Concurrent system calls in Linux

這個問題很簡單,但Googling並沒有發現任何有關它的信息。 並發調用Linux系統是否安全,例如同時(可能socket()在多個線程上調用socket() 具體來說,內核是否保證socket()connect()和/或send()線程安全?

如果沒有,為什么不呢? 我真的很想了解有關此主題的更多信息,以及為什么系統調用是線程安全的還是不線程安全的。

我主要關心的是,當從不同線程中調用時, socket()不會返回重復或無效的文件描述符。 就我而言,我不會同時連接或寫入相同的套接字。

並發調用Linux系統是否安全,例如同時(可能)在多個線程上調用socket()?

是的,它們是線程安全的。 雖然我不確定它是否符合POSIX標准。

具體來說,內核是否保證socket(),connect()和/或send()的線程安全?

根據鏈接,是的。 它說鎖是在內部使用的,這意味着您的send操作將被序列化,但是沒有任何特定的順序。

回答問題的更新部分:

我主要關心的是,當從不同線程中調用時,socket()不會返回重復或無效的文件描述符。

這里不用擔心。 操作系統將確保套接字的文件描述符不重復。

“您會讓系統崩潰嗎?” 沒有。

“您的線程是否可能彼此“競爭”,否則可能彼此“競爭”,從而導致您獲得完全不可預測和不可再現的結果?絕對可以。

內核通常將資源(例如套接字...)視為所有線程所屬的進程所擁有。 而且,如果某個特定的呼叫正在“阻塞”,則可能會阻塞該 過程。

最后, 套接字操作(例如send )實際上並不會從線程的使用中受益 ,因為數據包是通過一條(相對較慢的...) 單根線以毫秒的速度一次發送和接收的。 一個簡單的select()輪詢循環通常可以正常工作。 “復雜性不會得到回報。”

暫無
暫無

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

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