freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于多核系統(tǒng)的編程技術(shù)第一節(jié)并行程序設(shè)計流程第二節(jié)線-文庫吧資料

2025-07-24 18:45本頁面
  

【正文】 } } pthread_exit(NULL)。 return code from pthread_create() is %d\n, rc)。threads[t], NULL, PrintHello, (void *)t)。 t++){ printf(Creating thread %d\n, t)。 for(t=0。 } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]。 include include define NUM_THREADS 5 void *PrintHello(void *threadid) { printf(\n%d: Hello World!\n, threadid)。 ? pthread_exit: 是顯式退出一個線程。 –被另一個線程調(diào)用 pthread_cancel。 終止線程 ? 一個線程的終止,可以通過以下幾種方法: –從它的開始程序返回。 17 } 問題: 當線程創(chuàng)建完畢后,你怎么知道這個線程什么時候被操作系統(tǒng)調(diào)用運行? 方法 舉例 除非你自己定義了 pthread線程調(diào)度機制,否則,由操作系統(tǒng)或者應(yīng)用程序來決定。ThreadA,NULL,taska,p)。 14 int *p=amp。 8 } 9 10 int main(int argc,char *argv[]) 11 { 12 pthread_t ThreadA。 3 4 void * taska(void *n) 5 { 6 int a=*n。 1 # include 。 ? 相比較而言,創(chuàng)建線程和管理線程只帶來很小的系統(tǒng)負載。 ? 主要功能: –線程創(chuàng)建與終止 –線程同步 –輔助功能 ? 程序代碼包含在 。 //釋放互斥量 ()。 (100)。 private static void useResource() { //等待進入已鎖定代碼 ()。 other_shared_var = 0。 ? Monitor類 – 完成互斥和鎖功能。 } } ④ 線程同步 ? 具有對特定變量進行互斥操作和原子操作的能力。 (Main thread exits.)。 (Main thread does some work, then sleeps.)。 using 。不存在增加線程數(shù)目最大值的方法。 ? GetMinThreads()和 SetMinThreads(): 可以用來查詢和設(shè)置線程池中線程數(shù)目的最小值。 //或 ()。//注意 :Join()函數(shù)的調(diào)用會一直阻塞到被合并的線程退出 (1000)。 Thread t = new Thread(new ThreadStart(ThreadProc))。 ② 管理線程 ? 終止線程 ? 等待線程 ? 掛起合恢復(fù)線程 Thread t = new Thread(new ThreadStart(ThreadProc))。 普通下 (BelowNormal) 可以將 Thread 安排在具有 Normal 優(yōu)先級的線程之后,在具有 Lowest 優(yōu)先級的線程之前。 普通 (Normal) 可以將 Thread 安排在具有 AboveNormal 優(yōu)先級的線程之后,在具有 BelowNormal 優(yōu)先級的線程之前。 線程優(yōu)先級 ? 優(yōu)先級級別 級 別 說 明 最高 (Highest) 可以將 Thread 安排在具有任何其他優(yōu)先級的線程之前。 ()。 = ThreadTwo。 = ThreadOne。 ()。 ()。 (0)。 i 4。 ()。 } } public static void Main() { (Main thread: Start a second thread.)。 i++) { (ThreadProc: {0}, i)。 public class ThreadExample { public static void ThreadProc() { for (int i = 0。 更為精練 創(chuàng)建舉例 using System。 using 。 ? C ? .NET框架、 CLR以及程序執(zhí)行所需要的工具合起來,稱為“ .NET”。 –單個進程空間內(nèi) C運行時庫的多個副本會導(dǎo)致不確定的行為。 ⑩ Windows多線程應(yīng)用程序的變異和鏈接 Windows中編譯多線程代碼的命令行開關(guān) 開關(guān) 含義 /MT 使用靜態(tài)鏈接的多線程應(yīng)用程序 /MTd 多線程應(yīng)用程序調(diào)試使能 /MD 多線程動態(tài)鏈接庫( DLL) /MDd 多線程動態(tài)鏈接庫調(diào)試使能 這些編譯器開關(guān)可以通過命令行或者在 Visual Studio 中項目屬性的“代碼生成”標簽中選擇合適的選項來指定。 ? 纖程是由線程轉(zhuǎn)換來的。 纖程與線程的聯(lián)系與區(qū)別 ? 纖程函數(shù)沒有返回值,線程函數(shù)有返回值 ? 當線程函數(shù)退出時,線程會終止;而纖程退出時,線程和所有與該線程相關(guān)的纖程都將終止。 纖程的缺點與優(yōu)點 ? 缺點: –在線程中任意時刻只能運行一個纖程,因此在并行程序設(shè)計中沒有什么價值 ? 優(yōu)點: –創(chuàng)建纖程的開銷很小,當有大量任務(wù)需要處理并且試圖之處理一個時,纖程機制非常有效。 ? 刪除一個纖程: – VOID DeleteFiber( PVOID addressofFiberEnvironment )。 ? 創(chuàng)建計劃運行的新纖程; – PVOID CreatFiber (DWORD fiberStackSize, PFIBER_START_ROUTINE fiberProc, PVOID fiberProcParameter )。 – 限制:一個線程不能同時運行多個纖程,即纖程機制不會從超線程技術(shù)或者多核平臺獲益。 – 纖程對 Windows內(nèi)核來說是透明的, Windows內(nèi)核感覺不到纖程的存在,內(nèi)核僅僅負責線程的運行。 ? 獲取進程的親和掩碼: – BOOL GetProcessorAffinityMask ( HANDLE processHandle, PDWORD_PTR processAffinityMask, PDWORD_PTR systemAffinityMask)。從而達到線程和處理器核之間達到負載平衡。 ⑧ 處理器親和 ? 親和( Affinity)定義: –線程對其所運行處理器的優(yōu)先選擇,是可以由開發(fā)人員設(shè)置的。 注意: ? 超線程技術(shù)的處理器: –兩個邏輯處理器的執(zhí)行不會由于線程優(yōu)先級而相互影響。創(chuàng)建后,線程優(yōu)先級通過下面的函數(shù)改變: – BOOL SetThreadPriority( HANDLE threadHandle, int newPriority)。 ? SetThreadPriorityBoost( HANDLE hThread, PBOOL disable)。 ? SetThreadPriorityBoost( HANDLE hThread, BOOL disable)。 – 前臺運行、 Windows接收到消息(如鼠標輸入)或阻塞條件被釋放。 ? Windows優(yōu)先級范圍: 0到 31,其中 0嗲不最低優(yōu)先級, 31嗲表最高優(yōu)先級。依賴于 I/O完成端口( I/O pletion port): I/O完成端口可以將線程和 I/O端口綁定在特定的系統(tǒng)資源上 – 將 Flags設(shè)置成 WT_EXECUTEINIOTHERAD ? 不能用來處理異步 I/O。 ? 線程池中的數(shù)目是動態(tài)的,并且受 Windows的控制,Windows內(nèi)部的調(diào)度算法決定當前線程工作服在的最佳方式。 – 使用線程池最重要的函數(shù): ? QueueUserWorkItem() QueueUserWorkItem( LPTHERAD_START_ROUTINE Function, PROID Context, ULONG Flags )。 – 64位版本: InterlockedCompareExchange64() – 交換指針: InterlockedCompareExchangePointer() 單鏈表的原子訪問 ? InitializeSListHead():初始化鏈表 ? InterlockedPushEntrySList() :在鏈表頭部加一個節(jié)點 ? InterlockedPopEntrySList(): 在鏈表頭部刪除一個節(jié)點 ? InterlockedFlushSList(): 清除鏈表中的所有節(jié)點。把 32位目標變量與一個給定值相加,并將二者的和賦給該目標變量。 ? 互鎖函數(shù)提供了 32位和 64位變量的原子操作。 if(!status){ //釋放失敗,進行修復(fù) } } ⑤ 原子操作 ? 由于獲取互斥量以及其他鎖原語的開銷可能非常大,而一些特殊的指令使開發(fā)人員快速執(zhí)行普通的原子操作,而不會帶來鎖獲取所導(dǎo)致的開銷。 if( NULL == hMutex ){ //mutex無效,處理錯誤 } ... status = WaitForSingleObject(hMutex,0)。 DWORD status。 ? 最后,互斥量被銷毀。 ? 離開臨界段: ReleaseMutex()。 ? 調(diào)用互斥量 WaitForSingleObject ()。 if( status != WAIT_OBJECT_0){ //不能進入臨界段:需要恰當進行處理 } else{ //進入臨界段 //該退出臨界段了 status = ReleaseSemaphore(hSemaphore,1,NULL)。 hSemaphore = CreatSemaphore(NULL,1,1,NULL)。 endif HANDLE hSemaphore。 HANDLE OpenSemaphore( DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName )。 ? 互斥量:特殊的信號量,對臨界段的互斥訪問權(quán)僅賦予一個線程。一般情況下,任意時刻下僅允許一個線程進入臨界段執(zhí)行。 ? Win32 API中的同步對象:事件、信號量、互斥量以及臨界段。 } return 0。039。) break。 || c 39。 if( c 39。\n39。 } while (1) { int c = getc(stdin)。 printf(To kill a thread, press 09,then enter.\n )。ThreadArgs[i], 0, amp。 hThread[i] = (HANDLE)_beginthreadex(NULL, amp。i++){ threadArgs[i].Id = i。 //創(chuàng)建 10個線程 for(int i=0。 HANDLE hThread[NUM_THREADS]。 return 0。 } Sleep(1000)。 ResetEvent(hTerminate)。 int id= ((ThreadArgs*)pArgs)Id。 }ThreadArgs。 define NUM_THREADS 10 include include include typedef struct { int Id。 DWORD WaitForSingleObject( HANDLE hHandle, // handle to object to wait for DWORD dwMilliseconds // timeout interval in milliseconds )。 HANDLE OpenEvent( DWORD dwDesiredAccess, // access flag BOOL bInheritHandle, // inherit flag LPCTSTR lpName // pointer to eventobject na
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1