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執行緒程式設計
- 使用執行緒池優化多執行緒程式設計執行緒優化程式設計
- 程式設計思想之多執行緒與多程式(3):Java 中的多執行緒程式設計執行緒Java
- 程式設計思想之多執行緒與多程式(4):C++ 中的多執行緒程式設計執行緒C++
- 多執行緒程式設計執行緒程式設計
- Java多執行緒程式設計—鎖優化Java執行緒程式設計優化
- iOS多執行緒程式設計總結(中)iOS執行緒程式設計
- JavaScript多執行緒程式設計JavaScript執行緒程式設計
- Boost多執行緒程式設計執行緒程式設計
- UNIX多執行緒程式設計執行緒程式設計
- 多執行緒程式設計(轉)執行緒程式設計
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- .NET多執行緒程式設計(1):多工和多執行緒 (轉)執行緒程式設計
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 多程式多執行緒程式設計彙總(持續更新中)執行緒程式設計
- iOS多執行緒程式設計:執行緒同步總結iOS執行緒程式設計
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- java多執行緒程式設計:你真的瞭解執行緒中斷嗎?Java執行緒程式設計
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- 多執行緒程式設計基礎(二)-- 執行緒池的使用執行緒程式設計
- C#多執行緒程式設計(1):執行緒的啟動C#執行緒程式設計
- python 多執行緒程式設計Python執行緒程式設計
- Python多執行緒程式設計Python執行緒程式設計
- GCD 與多執行緒程式設計GC執行緒程式設計
- IOS多執行緒程式設計:概述iOS執行緒程式設計
- C#多執行緒程式設計C#執行緒程式設計
- linux 多執行緒程式設計Linux執行緒程式設計
- 多執行緒程式設計ExecutorService用法執行緒程式設計
- 29. 多執行緒程式設計執行緒程式設計
- Tomcat 配合虛擬執行緒,一種新的程式設計體驗Tomcat執行緒程式設計
- 多執行緒程式設計中的幾個基本概念執行緒程式設計
- Java程式設計師面試中的多執行緒問題Java程式設計師面試執行緒
- .NET多執行緒程式設計(4):執行緒池和非同步程式設計 (轉)執行緒程式設計非同步
- python多執行緒程式設計1— python對多執行緒的支援Python執行緒程式設計
- 多執行緒程式設計的核心思想執行緒程式設計
- Linux下的多執行緒程式設計Linux執行緒程式設計
- 多執行緒8執行緒
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計