女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>Windows CE 進(jìn)程、線程和內(nèi)存管理二

Windows CE 進(jìn)程、線程和內(nèi)存管理二

2017-11-08 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

 Windows CE 進(jìn)程、線程和內(nèi)存管理(二)
  2006-12-09 17:50:44 來源:嵌入式資訊網(wǎng)
  分享到: 二、同步
  在多數(shù)情況下,線程之間難免要相互通信、相互協(xié)調(diào)才能完成任務(wù)。比如,當(dāng)有多個(gè)線程共同訪問同一個(gè)資源時(shí),就必須保證一個(gè)線程正讀取這個(gè)資源數(shù)據(jù)的時(shí)候,其它線程不能夠修改它。這就需要線程之間相互通信,了解對(duì)方的行為。再有當(dāng)一個(gè)線程要準(zhǔn)備執(zhí)行下一個(gè)任務(wù)之前,它必須等待另一個(gè)線程終止才能運(yùn)行,這也需要彼此相互通信。實(shí)際開發(fā)過程中,線程間需要同步的情況非常多。Windows CE.NET給我們提供了很多的同步機(jī)制,熟練的掌握這些機(jī)制并合理運(yùn)用會(huì)使線程之間的同步更合理、更高效。進(jìn)程間的通信機(jī)制在下一篇文章中講解。
  Windows CE.NET具有兩種運(yùn)行模式:用戶模式和內(nèi)核模式。并且允許一個(gè)運(yùn)行于用戶模式的應(yīng)用程序隨時(shí)切換為內(nèi)核模式,或切換回來。線程同步的有些解決辦法運(yùn)行在用戶模式,有些運(yùn)行在內(nèi)核模式?!禬indows核心編程》上說從用戶模式切換到內(nèi)核模式再切換回來至少要1000個(gè)CPU周期。我查看過CE下API函數(shù)SetKMode的源碼,這個(gè)函數(shù)用于在兩種模式間切換,改變模式只需修改一些標(biāo)志,至于需要多少個(gè)CPU周期很難確定。但至少可以肯定來回切換是需要一定時(shí)間的。所以在選擇同步機(jī)制上應(yīng)該優(yōu)先考慮運(yùn)行在用戶模式的同步解決辦法。
  1、互鎖函數(shù)
  互鎖函數(shù)運(yùn)行在用戶模式。它能保證當(dāng)一個(gè)線程訪問一個(gè)變量時(shí),其它線程無法訪問此變量,以確保變量值的唯一性。這種訪問方式被稱為原子訪問?;ユi函數(shù)及其功能見如下列表:
  函數(shù)參數(shù)和功能
  InterlockedIncrement參數(shù)為PLONG類型。此函數(shù)使一個(gè)LONG變量增1
  InterlockedDecrement參數(shù)為PLONG類型。此函數(shù)使一個(gè)LONG變量減1
  InterlockedExchangeAdd參數(shù)1為PLONG類型,參數(shù)2為LONG類型。此函數(shù)將參數(shù)2賦給參數(shù)1指向的值
  InterlockedExchange參數(shù)1為PLONG類型,參數(shù)2為LONG類型。此函數(shù)將參數(shù)2的值賦給參數(shù)1指向的值
  InterlockedExchangePointer參數(shù)為PVOID* 類型,參數(shù)2為PVOID類型。此函數(shù)功能同上。具體參見幫助
  InterlockedCompareExchange參數(shù)1為PLONG類型,參數(shù)2為LONG類型,參數(shù)3為LONG類型。此函數(shù)將參數(shù)1指向的值與參數(shù)3比較,相同則把參數(shù)2的值賦給參數(shù)1指向的值。不相同則不變
  InterlockedCompareExchangePointer參數(shù)1為PVOID* 類型,參數(shù)2為PVOID類型,參數(shù)3為PVOID。此函數(shù)功能同上。具體參見幫助
  2、臨界區(qū)
  臨界區(qū)對(duì)象運(yùn)行在用戶模式。它能保證在臨界區(qū)內(nèi)所有被訪問的資源不被其它線程訪問,直到當(dāng)前線程執(zhí)行完臨界區(qū)代碼。除了API外,MFC也對(duì)臨界區(qū)函數(shù)進(jìn)行了封裝。臨界區(qū)相關(guān)函數(shù):
  void InitializeCriticalSection ( LPCRITICAL_SECTION );
  void EnterCriticalSection ( LPCRITICAL_SECTION );
  void LeaveCriticalSection ( LPCRITICAL_SECTION );
  void DeleteCriticalSection ( LPCRITICAL_SECTION );
  舉例如下:
  void CriticalSectionExample (void)
  {
  CRITICAL_SECTION csMyCriticalSection;
  InitializeCriticalSection (&csMyCriticalSection); ///初始化臨界區(qū)變量
  __try
  {
  EnterCriticalSection (&csMyCriticalSection); ///開始保護(hù)機(jī)制
  ///此處編寫代碼
  }
  __finally ///異常處理,無論是否異常都執(zhí)行此段代碼
  {
  LeaveCriticalSection (&csMyCriticalSection); ///撤銷保護(hù)機(jī)制
  }
  }
  MFC類使用更簡(jiǎn)單:
  CCriticalSection cs;
  cs.Lock();
  ///編寫代碼
  cs.Unlock();
  使用臨界區(qū)要注意的是避免死鎖。當(dāng)有兩個(gè)線程,每個(gè)線程都有臨界區(qū),而且臨界區(qū)保護(hù)的資源有相同的時(shí)候,這時(shí)就要在編寫代碼時(shí)多加考慮。
  3、事件對(duì)象
  事件對(duì)象運(yùn)行在內(nèi)核模式。與用戶模式不同,內(nèi)核模式下線程利用等待函數(shù)來等待所需要的事件、信號(hào),這個(gè)等待過程由操作系統(tǒng)內(nèi)核來完成,而線程處于睡眠狀態(tài),當(dāng)接收到信號(hào)后,內(nèi)核恢復(fù)線程的運(yùn)行。內(nèi)核模式的優(yōu)點(diǎn)是線程在等待過程中并不浪費(fèi)CPU時(shí)間,缺點(diǎn)是從用戶模式切換到內(nèi)核模式需要一定的時(shí)間,而且還要切換回來。在講解事件對(duì)象前應(yīng)該先談?wù)劦却瘮?shù)。等待函數(shù)有四個(gè)。具體參數(shù)和功能見下表:
  函數(shù)參數(shù)和功能
  WaitForSingleObject參數(shù)1為HANDLE類型,參數(shù)2為DWORD類型。此函數(shù)等待參數(shù)1標(biāo)識(shí)的事件,等待時(shí)間為參數(shù)2的值,單位ms。如果不超時(shí),當(dāng)事件成為有信號(hào)狀態(tài)時(shí),線程喚醒繼續(xù)運(yùn)行。
  WaitForMultipleObjects參數(shù)1為DWORD類型,參數(shù)2為HANDLE * 類型,參數(shù)3為BOOL類型,參數(shù)4為DWORD類型。此函數(shù)等待參數(shù)2指向的數(shù)組中包含的所有事件。如果不超時(shí),當(dāng)參數(shù)3為FALSE時(shí),只要有一個(gè)事件處于有信號(hào)狀態(tài),函數(shù)就返回這個(gè)事件的索引。參數(shù)3為TRUE時(shí),等待所有事件都處于有信號(hào)狀態(tài)時(shí)才返回。
  MsgWaitForMultipleObjects參數(shù)1為DWORD類型,參數(shù)2為LPHANDLE類型,參數(shù)3為BOOL類型,參數(shù)4為DWORD類型,參數(shù)5為DWORD類型。此函數(shù)功能上同WaitForMultipleObjects函數(shù)相似,只是多了一個(gè)喚醒掩碼。喚醒掩碼都是和消息有關(guān)的。此函數(shù)不但能夠?yàn)槭录却€能為特定的消息等待。其實(shí)這個(gè)函數(shù)就是專為等待消息而定義的。
  MsgWaitForMultipleObjectsEx參數(shù)1為DWORD類型,參數(shù)2為LPHANDLE類型,參數(shù)3為DWORD類型,參數(shù)4為DWORD類型,參數(shù)5為DWORD類型。此函數(shù)是MsgWaitForMultipleObjects函數(shù)的擴(kuò)展。將原來函數(shù)的參數(shù)3除掉,添加參數(shù)5為標(biāo)志。標(biāo)志有兩個(gè)值:0或MWMO_INPUTAVAILABLE。
  如果一個(gè)線程既要執(zhí)行大量任務(wù)同時(shí)又要響應(yīng)用戶的按鍵消息,這兩個(gè)專用于等待消息的函數(shù)將非常有用。
  和事件有關(guān)的函數(shù)有:
  HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,
  BOOL bManualReset,
  BOOL bInitialState,
  LPTSTR lpName);
  BOOL SetEvent(HANDLE hEvent );
  BOOL PulseEvent(HANDLE hEvent);
  BOOL ResetEvent(HANDLE hEvent);
  HANDLE OpenEvent(DWORD dwDesiredAccess,
  BOOL bInheritHandle,
  LPCTSTR lpName );
  事件對(duì)象是最常用的內(nèi)核模式同步方法。它包含一個(gè)使用計(jì)數(shù)和兩個(gè)BOOL變量。其中一個(gè)BOOL變量指定這個(gè)事件對(duì)象是自動(dòng)重置還是手工重置。另一個(gè)BOOL變量指定當(dāng)前事件對(duì)象處于有信號(hào)狀態(tài)還是無信號(hào)狀態(tài)。
  函數(shù)CreateEvent創(chuàng)建一個(gè)事件對(duì)象,參數(shù)1必須為NULL,參數(shù)2指定是否手工重新設(shè)置事件對(duì)象的狀態(tài)。如果為FALSE,當(dāng)?shù)却瘮?shù)接到信號(hào)并返回后此事件對(duì)象被自動(dòng)置為無信號(hào)狀態(tài)。這時(shí)等待此事件對(duì)象的其它線程就不會(huì)被喚醒,因?yàn)槭录?duì)象已經(jīng)被置為無信號(hào)狀態(tài)。如果參數(shù)2設(shè)置為TRUE,當(dāng)?shù)却瘮?shù)接到信號(hào)并返回后事件對(duì)象不會(huì)被自動(dòng)置于無信號(hào)狀態(tài),其它等待此事件對(duì)象的線程都能夠被喚醒。用ResetEvent函數(shù)可以手工將事件對(duì)象置為無信號(hào)狀態(tài)。相反SetEvent函數(shù)將事件對(duì)象置為有信號(hào)狀態(tài)。PulseEvent函數(shù)將事件對(duì)象置為有信號(hào)狀態(tài),然后立即置為無信號(hào)狀態(tài),在實(shí)際開發(fā)中這個(gè)函數(shù)很少使用。OpenEvent函數(shù)打開已經(jīng)創(chuàng)建的事件對(duì)象,一般用于不同進(jìn)程內(nèi)的線程同步。在調(diào)用CreateEvent創(chuàng)建一個(gè)事件對(duì)象時(shí),傳遞一個(gè)名字給參數(shù)4,這樣在其它進(jìn)程中的線程就可以調(diào)用OpenEvent函數(shù)并指定事件對(duì)象的名字,來訪問這個(gè)事件對(duì)象。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1蘋果iphone 11電路原理圖
  2. 4.98 MB   |  10次下載  |  5 積分
  3. 2EMC電路設(shè)計(jì)工程師必備的EMC基礎(chǔ)
  4. 0.42 MB   |  2次下載  |  2 積分
  5. 3AU3116 2×60W模擬輸入雙通道Class-D 音頻功率放大器數(shù)據(jù)手冊(cè)
  6. 1.19 MB   |  1次下載  |  免費(fèi)
  7. 4低壓降肖特基整流管SR340L數(shù)據(jù)手冊(cè)
  8. 0.78 MB   |  1次下載  |  免費(fèi)
  9. 5FH153C6電子開關(guān)芯片數(shù)據(jù)手冊(cè)
  10. 0.95 MB   |  次下載  |  免費(fèi)
  11. 6LI32480T035IA3004 液晶屏規(guī)格書
  12. 4.27 MB   |  次下載  |  1 積分
  13. 7DFN1610-2L塑料封裝二極管SD07FDT系列規(guī)格書
  14. 2.61 MB   |  次下載  |  免費(fèi)
  15. 8SOT-23塑料封裝ESD保護(hù)二極管SMxxOC Series系列規(guī)格書
  16. 2.66 MB   |  次下載  |  免費(fèi)

本月

  1. 1三相逆變主電路的原理圖和PCB資料合集免費(fèi)下載
  2. 27.35 MB   |  110次下載  |  1 積分
  3. 2運(yùn)算放大器基本電路中文資料
  4. 1.30 MB   |  14次下載  |  免費(fèi)
  5. 3蘋果iphone 11電路原理圖
  6. 4.98 MB   |  10次下載  |  5 積分
  7. 4TL494工業(yè)用開關(guān)電源原理圖資料
  8. 0.22 MB   |  10次下載  |  1 積分
  9. 5常用電子元器件介紹
  10. 3.21 MB   |  7次下載  |  免費(fèi)
  11. 6AIWA J36 維修手冊(cè)
  12. 4.34 MB   |  4次下載  |  10 積分
  13. 7QW2893應(yīng)急燈專用檢測(cè)芯片
  14. 590.40 KB  |  4次下載  |  免費(fèi)
  15. 8相關(guān)協(xié)議信號(hào)總結(jié)
  16. 0.94 MB   |  4次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935130次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191390次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183344次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81591次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65989次下載  |  10 積分