C 之多執行緒程式設計

2022-07-26 05:51:12 字數 995 閱讀 6333

一.程序與執行緒

程序(process)是對一段靜態指令序列(程式)的動態執行過程,是系統進行資源分配和排程的乙個基本單位。與程序相關的資訊

包括程序的使用者標識,正在執行的已經編譯好的程式,程序程式和資料在儲存器中的位置等。

同乙個程序又可以劃分為若干個獨立的執行流,我們稱之為執行緒(thread),執行緒是程序中的基本執行。

在程序入口執行的第乙個執行緒被視為這個程序的主線程。在.net應用程式中,都是以main()方法作為入口的,當呼叫此方法時系統就會自動建立乙個主線程。乙個標準的執行緒由執行緒id(唯一標識),cpu暫存器、呼叫棧和執行緒本地儲存器(thread local storage,tls)組成的。cpu暫存器主要記錄當前所執行執行緒的狀態,呼叫棧主要用於維護執行緒所呼叫到的記憶體與資料,tls主要用於存放執行緒的狀態資訊。

執行緒與程序的區別

乙個程序擁有自己獨立的記憶體空間和資料,但是同乙個程序內的執行緒是共享其程序所擁有的記憶體空間和資料的。雖然每個執行緒可以擁有自己的堆疊和暫存器,但它基本不擁有系統資源,執行緒的執行依賴於程序提供的上下文環境,並且使用的是程序的資源。

執行緒的排程

有兩種排程模型:分時排程模型搶占式排程模型。.net採用搶占式排程模型,即優先讓執行池中優先順序高的執行緒占用cpu,如果可執行池中的執行緒優先順序相同,那麼就隨機選擇乙個執行緒,使其占用cpu。

如果希望明確地讓乙個執行緒給另外乙個執行緒執行的機會,可以採取以下辦法之一:

調整各個執行緒的優先順序

讓處於執行狀態的執行緒呼叫thread.sleep()方法

讓處於執行狀態的執行緒呼叫thread. suspend ()方法

讓處於執行狀態的執行緒呼叫另乙個執行緒的join()方法

C 之多執行緒程式設計 二

使用vs建立控制台程式 如下 include stdafx.h include include define num theads 5 程序數 using namespace std 函式返回的是函式指標,便於後面作為引數 void say hello void args 如果執行緒呼叫的函式在乙個...

c 之多執行緒

1.對多執行緒的呼叫用到頭檔案 1.1中的操縱函式 pthread create pthread t tidp,constpthread attr t attr,void start rtn void void arg 第乙個引數為指向執行緒 識別符號的 指標。第二個引數用來設定執行緒屬性。第三個引...

c 網路程式設計常用特性之多執行緒

在c 中線程使用system.threading.thread類處理。thread 類在例項化時接收乙個threadstart委託或者parameterizedthreadstart委託的建構函式 thread th newthread new threadstart method1 建立執行緒 t...