對于那些從未使用多個線程編寫應用程序但計劃將來這樣做的人,本文將很有用。
在Windows操作系統中,TerminateThread在成功終止的情況下返回TRUE。從這個邏輯開始,讓我們嘗試在 Linux 中組織類似的功能。
首先,我們將檢查線程是否處于活動狀態。為此,我們將發送一個零信號。如果進程中存在線程并且正在執行,則tkill將返回 0。之后,我們將使用PTHREAD_CANCEL_ASYNCHRONOUS參數調用 pthread_setcanceltype 函數,只有在此之后,我們才會嘗試通過調用 pthread_cancel 函數來終止線程。有一種可能的情況是線程仍將執行一段時間,為此我們將使用定時等待函數pthread_timedjoin_np(示例中有五次嘗試;每次需要 1000 毫秒)。線程終止后,我們將使用PTHREAD_CANCEL_DEFERRED參數再次調用pthread_setcanceltype。如果有任何錯誤,將始終返回 FALSE。
進程的任何線程都調用 ExitProcess 函數。
如果其中一個線程調用退出函數(對于 Linux 操作系統),或者ExitProcess 或 TerminateProcess(對于 Windows 操作系統),那么整個過程將被終止。同樣,如果線程收到操作包含在進程終止中的信號,則該信號將終止整個進程。
讓我們總結一下這一切。正確設計的應用程序不應調用強制線程終止函數。推薦的方法是線程函數返回時。如果 Linux 操作系統中的線程終止,聯接將釋放進程擁有的鏈接和系統資源。必須適當考慮到調用兩次聯接函數是不正確的事實(最好會出現錯誤)。如果 Windows 操作系統的線程被強制終止,請務必注意,應以任何方式清理所有非系統資源。在Linux中,有pthread_cleanup_push和pthread_cleanup_pop函數。
螺紋端接功能記錄在表 5 中。
表 5.線程終止函數。
結論
為了減輕中斷的影響,OS 提供了一個由并行運行的進程組成的模型。但是,此模型有其與交互、自己的地址空間的可用性等相關的弱點。
另一方面,應用程序在一個進程中具有多個控制線程可能是有利的。由于這些線程屬于同一進程,因此它們使用自己的堆棧上的共享地址空間。
線程可以使用信號量、消息等基元相互交互。這些原語是必要的,以使在關鍵部分中無法同時執行兩個或多個線程。線程可以處于以下狀態之一:可運行或執行受阻。一個線程還可以使用交互基元與另一個線程交互。請記住,在使用交互原語時,應謹慎行事以避免錯誤和死鎖。
在本文中,我們分析了Windows和Linux操作系統的流式處理API;呈現基于事件的線程創建和同步接口;討論了使用共享資源的函數;以及詳細的線程終止方式。
審核編輯:郭婷
-
Linux
+關注
關注
87文章
11456瀏覽量
212750 -
WINDOWS
+關注
關注
4文章
3606瀏覽量
90911 -
操作系統
+關注
關注
37文章
7077瀏覽量
124933
發布評論請先 登錄
聚徽廠家解碼——工控機操作系統選擇:Windows、Linux、QNX 如何匹配工業場景
鴻道Intewell操作系統為半導體行業打造高可靠實時控制系統

云服務器選擇什么操作系統好?
鴻道Intewell操作系統的Windows實時拓展方案

deepin操作系統介紹

如何在windows上emulate不同操作系統
國產實時操作系統:和RT-Linux,Zephyr的實時性對比

linux是實時系統還是分時操作系統
嵌入式 Linux 操作系統配置
linux操作系統安裝步驟 linux操作系統的特點及組成
Windows操作系統是什么?它有哪些特點?
Windows操作系統中的常用命令

CYAT81658是否支持Windows操作系統?
工業實時操作系統對比:鴻道Intewell跟rt-linux有啥區別

研華工控機用什么系統?Windows與Linux操作系統的較量

評論