簡體   English   中英

應該在上下文切換之前完成系統調用

[英]should system calls be completed before context switch

是否可以保證在上下文切換或搶占之前完成系統調用? 我們是否應該期望系統調用指令是不間斷的。 還是取決於系統調用類型或操作系統實現?

是否保證在上下文切換或搶占之前完成系統調用

不,即使在單線程應用程序中,許多系統調用實際上也會導致上下文切換發生。 我們不要忘記,當今大多數現代系統上都在運行其他進程,此外還有硬件中斷和大量異步事件。

還是取決於系統調用類型或操作系統實現?

是的,非常非常。

如果那些系統調用線程安全,什么保證與否?

閱讀系統文檔。

大多數C編譯器工具鏈都包含單線程和多線程庫。 甚至單線程庫都是上下文切換安全的,但不一定從同一過程中重新進入。 上下文切換就是這樣,將當前線程的整個上下文切換為一個新的上下文。 只要這些線程沒有接觸任何共享資源(上下文重疊),就沒有其他需要關注的了。 但是,在編寫多線程應用程序時,您必須對自己擁有的線程之間共享的資源負責。 好的設計在很大程度上避免了共享資源,但是在某些不可避免的關鍵路徑上也是如此。

大多數現代操作系統都有許多內部共享的資源,並且它們使用各種技術來同步對這些資源的訪問。 鎖,信號量,關鍵部分,原子操作(無鎖算法)都是多線程環境中的常見做法。 應用程序編寫者不應該永遠不必擔心操作系統如何管理共享資源的訪問內部,這樣你就可以調用openreadwrite您的應用程序,而無需擔心,只要你不分享你的進程中的線程之間的任何手柄。

在編寫多線程應用程序時,應使用編譯器工具鏈提供的線程安全庫。 線程安全庫使用與操作系統相同的所有技術來保護內部共享的資源,但是它們不能保護您自己! 如果您在線程之間共享資源,例如全局變量,句柄,緩沖區,甚至是對某些硬件寄存器的訪問,則必須安排同步這些訪問。

操作系統編寫者負責保護自己的內部共享資源,並記錄所有線程安全問題。

庫作者負責保護自己的內部共享資源,並記錄所有線程安全問題。

應用程序編寫者負責保護自己的共享資源,並記錄所有流程並發問題(進程間資源共享)。

不。可以說您正在等待套接字讀取完成。 這可能需要幾秒鍾。 現在,如果您的單核CPU要執行多任務,則您希望它在等待時運行其他線程。

暫無
暫無

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

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