主頁 > 軟體工程 > 主執行緒與呼叫CoInitializeEx的子執行緒互鎖問題

主執行緒與呼叫CoInitializeEx的子執行緒互鎖問題

2020-09-20 15:08:34 軟體工程

我有一應用在WIN7下一定概率出現呼叫API程序中互鎖卡死現象

大概執行流程:
1.  對話框應用程式在OnInitDialog中創建 A執行緒
 2. A執行緒隨后呼叫LoadLibrary加載一個使用了COM的動態庫
 3. 然后一定概率應用程式的0號執行緒與 A執行緒互鎖卡死
請問是什么原因,又如何解決呢? 

鎖死的資源:

0:000> !locks
CritSec ntdll!LdrpLoaderLock+0 at 770e8340
WaiterWoken        No
LockCount          1
RecursionCount     1
OwningThread       23b4
EntryCount         0
ContentionCount    5
*** Locked

CritSec ole32!g_mxsSingleThreadOle+18 at 76ab873c
WaiterWoken        No
LockCount          1
RecursionCount     1
OwningThread       14c8
EntryCount         0
ContentionCount    1
*** Locked

執行緒列ID串列:

0:000> ~
.  0  Id: 190c.14c8 Suspend: 0 Teb: 7ffde000 Unfrozen
   1  Id: 190c.1540 Suspend: 0 Teb: 7ffdd000 Unfrozen
   2  Id: 190c.15bc Suspend: 0 Teb: 7ffdc000 Unfrozen
   3  Id: 190c.2dc Suspend: 0 Teb: 7ffdb000 Unfrozen
   4  Id: 190c.1abc Suspend: 0 Teb: 7ffda000 Unfrozen
   5  Id: 190c.2608 Suspend: 0 Teb: 7ffd9000 Unfrozen
   6  Id: 190c.23b4 Suspend: 0 Teb: 7ffd8000 Unfrozen
   7  Id: 190c.c74 Suspend: 0 Teb: 7ffd7000 Unfrozen
   8  Id: 190c.19a4 Suspend: 0 Teb: 7ffd6000 Unfrozen

執行緒0呼叫堆疊

0:000> ~0kb
ChildEBP RetAddr  Args to Child              
0012f110 770565ec 77041df5 00000104 00000000 ntdll!KiFastSystemCallRet
0012f114 77041df5 00000104 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
0012f178 77041cd9 00000000 00000000 0012f1e0 ntdll!RtlpWaitOnCriticalSection+0x13e
0012f1a0 7706f88f 770e8340 705f0c1b 7722289e ntdll!RtlEnterCriticalSection+0x150
0012f23c 77072120 750d0000 0012f278 00000000 ntdll!LdrGetProcedureAddressEx+0x159
0012f258 75416d18 750d0000 0012f278 00000000 ntdll!LdrGetProcedureAddress+0x18
0012f280 771b6665 750d0000 7722289e 0012f43c KERNELBASE!GetProcAddress+0x44
0012f2c8 771b66c6 750d0000 772280d0 0012f2f8 rpcrt4!__delayLoadHelper2+0xee
0012f400 771b62ee 0012f43c 00000010 00000001 rpcrt4!_tailMerge_CRYPTBASE_dll+0xd
0012f414 769b153d 0012f43c 00000001 0012f450 rpcrt4!UuidCreate+0x11
0012f424 769b1745 0012f43c 754169c1 0012f4b4 ole32!wCoCreateGuid+0xf [d:\w7rtm\com\ole32\com\class\cocrguid.cxx @ 86]
0012f450 769b1a7f 00000008 754169c1 0012f4b4 ole32!CObjectContext::CreateObjectContext+0x52 [d:\w7rtm\com\ole32\com\dcomrem\context.cxx @ 999]
0012f46c 769b62bb 001f3fbc 001f3fd0 0012f4b4 ole32!InitThreadCtx+0x52 [d:\w7rtm\com\ole32\com\class\compobj.cxx @ 2268]
0012f498 769b0ade 00000000 00000002 00000000 ole32!wCoInitializeEx+0x62 [d:\w7rtm\com\ole32\com\class\compobj.cxx @ 2420]
0012f4b8 76d23cf6 00000002 00000002 76d23cc1 ole32!CoInitializeEx+0x2ee [d:\w7rtm\com\ole32\com\class\compobj.cxx @ 2119]
0012f4c4 76d23cc1 76d237a8 001f0448 76e037d0 imm32!CtfImmCoInitialize+0x18
0012f4c8 76d237a8 001f0448 76e037d0 0012f4f0 imm32!CanCreateThreadMgr+0x24
0012f4d8 76d23ad6 08040804 00000001 00170a08 imm32!CtfImmTIMActivate+0x6c
0012f4f0 76d22836 0778091f 00000001 0012f524 imm32!InternalImmLockIMC+0x77
0012f500 76d22cd6 0778091f 00000000 00170a08 imm32!ImmLockIMC+0xf
0012f524 76e01e7d 00170a08 00000000 00000001 imm32!ImmSetActiveContext+0x5c
0012f540 76e0030b 00170a08 00000001 00000282 user32!FocusSetIMCContext+0x28
0012f794 76e002a0 001de930 00000287 00000017 user32!ImeSystemHandler+0x31c
0012f7bc 76e1174b 00807d88 00000287 00000017 user32!ImeWndProcWorker+0x2bd
0012f7d8 76e0c4b7 00120668 00000287 00000017 user32!ImeWndProcA+0x22
0012f804 76e0c5b7 76e11729 00120668 00000287 user32!InternalCallWinProc+0x23
0012f87c 76e01b01 00000000 76e11729 00120668 user32!UserCallWinProcCheckWow+0x14b
0012f8ac 76e22bbe 76e11729 00120668 00000287 user32!CallWindowProcAorW+0x99
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for MFC42D.DLL - 
0012f8cc 5f42f2d9 76e11729 00120668 00000287 user32!CallWindowProcA+0x1b
WARNING: Stack unwind information not available. Following frames may be wrong.
0012f964 76e0c4b7 00120668 00000287 00000017 MFC42D!Ordinal1086+0x1db
0012f990 76e0c5b7 5f42f10e 00120668 00000287 user32!InternalCallWinProc+0x23
0012fa08 76e04ede 00000000 5f42f10e 00120668 user32!UserCallWinProcCheckWow+0x14b
0012fa64 76e04f4d 00807d88 00000287 00000017 user32!DispatchClientMessage+0xcf
0012fa8c 77056bae 0012faa4 00000018 0012fc44 user32!__fnDWORD+0x24
0012fab8 76dfab81 76e1fd6f 00170a08 0012fea4 ntdll!KiUserCallbackDispatcher+0x2e
0012fabc 76e1fd6f 00170a08 0012fea4 7ffdf000 user32!NtUserSetFocus+0xc
0012fb68 76e2532a 00400000 001114aa 000000c0 user32!InternalCreateDialog+0xb67
0012fb8c 76e17208 00400000 0041f798 00000000 user32!CreateDialogIndirectParamAorW+0x33
0012fbac 5f4363e7 00400000 0041f798 00000000 user32!CreateDialogIndirectParamA+0x1b
0012fc50 5f436a22 0041f798 00000000 00400000 MFC42D!Ordinal1647+0x296
0012fcb8 004033e1 00000000 00000000 7ffdf000 MFC42D!Ordinal1862+0x144
0012feb0 5f4359f3 00000000 00000000 7ffdf000 GrgPIN_GRGBankingEPP_XFS30D+0x33e1
0012fed0 00407788 00400000 00000000 001a32ea MFC42D!Ordinal1190+0x83
0012fee8 00407553 00400000 00000000 001a32ea GrgPIN_GRGBankingEPP_XFS30D+0x7788
0012ff88 76b1ef8c 7ffdf000 0012ffd4 7707367a GrgPIN_GRGBankingEPP_XFS30D+0x7553
0012ff94 7707367a 7ffdf000 705f01f3 00000000 kernel32!BaseThreadInitThunk+0xe
0012ffd4 7707364d 004073a0 7ffdf000 00000000 ntdll!__RtlUserThreadStart+0x70
0012ffec 00000000 004073a0 7ffdf000 00000000 ntdll!_RtlUserThreadStart+0x1b

執行緒6呼叫堆疊

0:000> ~6kb
ChildEBP RetAddr  Args to Child              
0338ca00 770565ec 77041df5 00000280 00000000 ntdll!KiFastSystemCallRet
0338ca04 77041df5 00000280 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
0338ca68 77041cd9 00000000 00000000 00000000 ntdll!RtlpWaitOnCriticalSection+0x13e
0338ca90 769beb0f 76ab873c 76ab7b04 76ab8724 ntdll!RtlEnterCriticalSection+0x150
0338caa4 769b0ad4 769b7998 00000845 769b79c4 ole32!COleStaticMutexSem::Request+0x39 [d:\w7rtm\com\ole32\common\olesem.cxx @ 177]
0338cac8 02151bd2 00000000 00000000 0338ccd8 ole32!CoInitializeEx+0x2e4 [d:\w7rtm\com\ole32\com\class\compobj.cxx @ 2118]
0338cbf0 02162e80 02150000 00000001 00000000 DevBaseDllD!DllMain+0xb7 [D:\workspace\SVN\Dunite\Dunite-ODevbase_v3.3.0\Src\DevBaseDll.cpp @ 81]
0338cc08 77068854 02150000 00000001 00000000 DevBaseDllD!_DllMainCRTStartup+0x80 [crtdll.c @ 273]
0338cc28 77075b3f 02162e00 02150000 00000001 ntdll!LdrpCallInitRoutine+0x14
0338cd1c 7706fb56 00000000 737530b7 7705780a ntdll!LdrpRunInitializeRoutines+0x26f
0338ce90 77072199 0338cefc 0338cec0 00000000 ntdll!LdrpLoadDll+0x472
0338cec8 7543b22e 0338cef5 0338cf1c 0338cefc ntdll!LdrLoadDll+0xaf
0338cf10 7541bde5 00000000 00000000 00000000 KERNELBASE!LoadLibraryExW+0x215
0338cf30 76b1deb7 0338cfcc 00000000 00000000 KERNELBASE!LoadLibraryExA+0x26
0338cf50 025b7c02 0338cfcc 0338d314 0338f2c0 kernel32!LoadLibraryA+0xbb
WARNING: Stack unwind information not available. Following frames may be wrong.
0338d1e4 025b2709 0338f2b8 0338f2c0 01ceb8b8 GrgSpPIND!poCreateInstance+0x662b
0338d314 025c6503 0338fb1c 0338f2c0 01ceb8b8 GrgSpPIND!poCreateInstance+0x1132
0338f2b8 01a60588 0338fda8 0338fdb4 01ceb8b8 GrgSpPIND!poCreateInstance+0x14f2c
0338fb28 01a55c04 0338fe58 0338fdb4 01ceb8b8 GrgSpFrameD!OSpIPCInterface::OSpIPCInterface+0xf07e
0338fda8 01a53cd6 0338fe18 0338feb0 00000000 GrgSpFrameD!OSpIPCInterface::OSpIPCInterface+0x46fa
0338fe58 01a53bd2 00000000 00000000 00000000 GrgSpFrameD!OSpIPCInterface::OSpIPCInterface+0x27cc
0338feb0 5f43a9e4 01ce9f50 00000000 00000000 GrgSpFrameD!OSpIPCInterface::OSpIPCInterface+0x26c8
0338ff54 1020c323 0012ed70 00000000 00000000 MFC42D!Ordinal1879+0x3cc
0338ff88 76b1ef8c 01ceb8b8 0338ffd4 7707367a MSVCRTD!_beginthreadex+0x133
0338ff94 7707367a 01ceb8b8 737501f3 00000000 kernel32!BaseThreadInitThunk+0xe
0338ffd4 7707364d 1020c2b0 01ceb8b8 00000000 ntdll!__RtlUserThreadStart+0x70
0338ffec 00000000 1020c2b0 01ceb8b8 00000000 ntdll!_RtlUserThreadStart+0x1b

uj5u.com熱心網友回復:

一種是com組件對多執行緒支持有問題,套間執行緒等。把它放主執行緒試試。

uj5u.com熱心網友回復:

CoInitializeEx 放初始化中

uj5u.com熱心網友回復:

1 CoInitializeEx 注意初始化的位置,應該在你開的執行緒前和呼叫對方Com庫前
2 最好有代碼試試

uj5u.com熱心網友回復:

COM Tutorial Samples  
Tutorial Home   
Previous Lesson   
Lesson List   
Next Lesson 

FRECLIEN - Client of Free-threaded Server
NOTE: FRECLIEN uses CoInitializeEx. CoInitializeEx is implemented only on Windows NT 4.0 and later versions. It is also implemented in the DCOM95 addition to Win95. This sample will not run on earlier versions of Windows NT or on Win95 without DCOM95. 

  
……

uj5u.com熱心網友回復:

參考 1 樓 oyljerry 的回復:
一種是com組件對多執行緒支持有問題,套間執行緒等。把它放主執行緒試試。


COM初始化是針對執行緒的,這里程式就是一定要開個子執行緒來呼叫一個COM組件。

如您所說,改程式架構,所有COM相關操作放在主執行緒,COM執行緒模型相同,可能是沒問題,但現在還不能動架構。

uj5u.com熱心網友回復:

參考 2 樓 schlafenhamster 的回復:
CoInitializeEx 放初始化中


請問初始化COM有什么忌諱嗎?

uj5u.com熱心網友回復:

參考 3 樓 xinhaoda 的回復:
1 CoInitializeEx 注意初始化的位置,應該在你開的執行緒前和呼叫對方Com庫前
2 最好有代碼試試


是的,現在就是子執行緒跑起來后,就開始初始化COM,還沒調到COM組件時,與主執行緒互鎖了。

uj5u.com熱心網友回復:

《Windows核心編程》

uj5u.com熱心網友回復:

這個需要源代碼才能查找,如果提供源代碼,應該可以幫你找到問題。
以下建議幾個地方:
1.主執行緒先初始化COM系統,一般采用套間執行緒,只有特殊情況才能使用自由執行緒
2然后啟動輔助執行緒,在輔助執行緒中也是需要初始化COM系統,一般輔助執行緒可以用套間執行緒或者自由執行緒,輔助執行緒采用自由執行緒更好用一點
3.兩個執行緒生成的COM介面指標除非是自由執行緒,否則不能在另外一個執行緒使用的

uj5u.com熱心網友回復:

DLLMain 里面干了啥??有沒有函式呼叫?

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/89660.html

標籤:進程/線程/DLL

上一篇:64位MATLAB2015a與64位VS2013混合編程

下一篇:C#繪制壓力云圖的問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more