Windows系統程式設計(三) 執行緒

2021-06-10 20:27:51 字數 1347 閱讀 3395

csdn部落格日期:2023年11月5日

handle createthread(lpsecurity_attributes lpthreadattributes, size_t dwstacksize, lpthread_start_routine lpstartaddress, 

lpvoid lpparameter, dword dwcreationflags, lpdword lpthreadid);

【note】createthread函式是windows api,不過在c/c++**中絕對不要呼叫createthread,而是_beginthreadex

vs附帶4個c/c++執行時庫,和2個面向.net的託管環境,所有都支援多執行緒開發。

c執行時庫在2023年發明時還沒有thread的概念,全域性變數在多執行緒環境中無法正常使用。必須建立乙個資料結構,並使之與使用了c/c++執行庫的每個執行緒關聯,在呼叫c/c++執行時庫函式時,那些函式必須知道去查詢主調執行緒的資料塊(_tiddata),避免影響其他執行緒。

呼叫createthread的後果:當乙個執行緒呼叫需要_tiddata的c/c++執行庫函式,庫函式會嘗試呼叫tlsgetvalue獲取位址,失敗時會為主調執行緒分配乙個_tiddata,並通過tlssetvalue關聯。問題是:如果執行緒使用了c/c++執行庫的signal函式,則整個程序會終止,因為異常處理幀沒有就緒;如果執行緒不通過_endthreadex來終止,_tiddata不會被釋放。

interlocaked系列函式執行的極快,呼叫一次通常只佔幾個cpu cycle,而且不需要使用者態核心態切換——這個切換需要占用1000個cycle以上。

與criticalsection不同的是,srwlock區分讀取者thread和寫入者thread,讓所有讀取者thread同一時刻訪問共享資源是可行的,只有當寫入者thread想要對資源更新時候才需要同步。這時候寫入者thraed獨佔對資源的訪問權。

【note】從效能角度:首先嘗試不用共享資料,然後使用volatile讀寫,interlocked api,srwlock以及criticalsection,最後使用接下來介紹的核心物件。

與使用者態的同步機制相比,核心物件的用途更廣泛,唯一缺點就是效能。

等待函式使乙個執行緒自願進入pending狀態,直到指定的核心物件被觸發為止。如果呼叫時相應核心已經處於觸發狀態,執行緒不會進入pending狀態。

【note】執行緒不能同時使用這兩種方式等待同一計時器!

Linux系統程式設計 執行緒函式(三)

今天我們編寫乙個程式來實現執行緒有關的函式 主要使用了平pthread testcancelhan函式和pthread cancel函式,include include include include void tfn void arg sleep i 通過i來區別每個執行緒 printf i m ...

系統程式設計之執行緒

pthread t tid 建立執行緒號,多個執行緒可以用陣列來實現,如pthread t tid 3 函式原型 int pthread create pthread t tid,const pthread attr t restrict attr,void start rtn void void ...

linux系統程式設計 執行緒

include int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg include include include include include include...