VMware虛擬化程式設計(8)—多執行緒中的VixDiskLib
目錄
前文列表
VMware 虛擬化程式設計(1) — VMDK/VDDK/VixDiskLib/VADP 概念簡析
VMware 虛擬化程式設計(2) — 虛擬磁碟檔案型別詳解
VMware 虛擬化程式設計(3) —VMware vSphere Web Service API 解析
VMware 虛擬化程式設計(4) — VDDK 安裝
VMware 虛擬化程式設計(5) — VixDiskLib 虛擬磁碟庫詳解之一
VMware 虛擬化程式設計(6) — VixDiskLib 虛擬磁碟庫詳解之二
VMware 虛擬化程式設計(7) — VixDiskLib 虛擬磁碟庫詳解之三
多執行緒注意事項
如果你的應用程式是多執行緒實現,那麼你應該將 VMDK 操作的請求序列化。通過 VixDiskLib_Open 獲取的磁碟控制程式碼 diskHandle 並不會繫結到單個執行緒,而是能夠跨執行緒使用。也就是說,你可以在一個執行緒中開啟磁碟,然後在其他執行緒中使用該磁碟的控制程式碼來進行其他的磁碟操作,但前提是你 必須序列化磁碟操作請求。否則在併發的場景中,必定會造成磁碟操作物件混亂的後果。
多執行緒中的 VixDiskLib
首先可以確定的是,VDDK 支援到多個 VMDK File 的併發 I/O。但存在著以下限制:
-
VixDiskLib_InitEx or VixDiskLib_Init 只能被每個程式中的主執行緒呼叫一次。
-
VixDiskLib_InitEx or VixDiskLib_Init 的回撥日誌函式引數不能指定為 NULL。VixDiskLib 提供的預設日誌函式是執行緒非安全的。在多執行緒環境中,必須提供自己實現的的執行緒安全日誌函式。
-
在呼叫 VixDiskLib_Open 或 VixDiskLib_Close() 時,VDDK 會分別進行或取消多個 lib 庫的初始化。這使得在多執行緒環境中,可能會導致一些需要初始化環境的 lib 庫不能生效。EXAMPLE:這會使 diskhandle2 的某些磁碟操作失敗。
Thread 1: VixDiskLib_Open ...... VixDiskLib_Close
Thread 2: ................................... VixDiskLib_Open ...... VixDiskLib_Close
解決該問題的辦法就是,使用一個指定的執行緒管理所有的 Open 和 Close 操作,而讓其他的執行緒進行 Read 或 Writes 等操作。EXAMPLE:
Open/Close Thread:
VixDiskLib_Open ...... VixDiskLib_Open ...... VixDiskLib_Close ...... VixDiskLib_Close ......
(handle1) (handle2) (handle1) (handle2)
I/O Thread 1:
(owns handle1) VixDiskLib_Read ... VixDiskLib_Read ...
I/O Thread 2:
(owns handle2) VixDiskLib_Read ... VixDiskLib_Read ...
該圖顯示了兩個獨立 diskHandle 上的併發讀取,需要注意的是,在同一個 diskHandle 上進行併發讀取是不被允許的。
相關文章
- Java中的虛擬執行緒與併發程式設計最佳化Java執行緒程式設計
- Java多執行緒程式設計—鎖優化Java執行緒程式設計優化
- python 多執行緒程式設計Python執行緒程式設計
- JavaScript多執行緒程式設計JavaScript執行緒程式設計
- Python多執行緒程式設計Python執行緒程式設計
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- Tomcat 配合虛擬執行緒,一種新的程式設計體驗Tomcat執行緒程式設計
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- 多執行緒程式設計基礎(二)-- 執行緒池的使用執行緒程式設計
- 多執行緒程式設計ExecutorService用法執行緒程式設計
- 29. 多執行緒程式設計執行緒程式設計
- java多執行緒程式設計:你真的瞭解執行緒中斷嗎?Java執行緒程式設計
- 多執行緒程式設計的核心思想執行緒程式設計
- Android中的多程式、多執行緒Android執行緒
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計
- Linux C/C++程式設計中的多執行緒程式設計基本概念LinuxC++程式設計執行緒
- 深入淺出Win32多執行緒程式設計--之MFC的多執行緒Win32執行緒程式設計
- 深入理解多執行緒程式設計執行緒程式設計
- [02] 多執行緒邏輯程式設計執行緒程式設計
- Linux C++ 多執行緒程式設計LinuxC++執行緒程式設計
- iOS開發-多執行緒程式設計iOS執行緒程式設計
- Task+ConcurrentQueue多執行緒程式設計執行緒程式設計
- C#多執行緒程式設計實戰1.1建立執行緒C#執行緒程式設計
- C#多執行緒程式設計-基元執行緒同步構造C#執行緒程式設計
- 多執行緒8執行緒
- Java中的多執行緒程式設計(超詳細總結)Java執行緒程式設計
- 多執行緒程式設計進階——Java類庫中的鎖執行緒程式設計Java
- Java多執行緒程式設計中的常見問題及最佳化策略Java執行緒程式設計
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- 多執行緒高併發程式設計(8) -- Fork/Join原始碼分析執行緒程式設計原始碼
- 多執行緒程式設計相關理論執行緒程式設計
- 多執行緒併發程式設計“鎖”事執行緒程式設計
- 使用Java實現多執行緒程式設計Java執行緒程式設計
- C語言 之 多執行緒程式設計C語言執行緒程式設計
- Java-基礎程式設計-多執行緒Java程式設計執行緒
- 執行緒以及多執行緒,多程式的選擇執行緒
- 鴻蒙程式設計江湖:ArkTS 的多執行緒與序列化支援鴻蒙程式設計執行緒
- Java中CompletableFuture與虛擬執行緒比較Java執行緒
- [Java基礎]虛擬執行緒Java執行緒