摘要:本系列Vmware虚拟机教程将会大家讲解系统的讲解Vmware知识点,看完这系列文章会让你对Vmware有更加清晰的理解和运用。
本系列Vmware虚拟机教程将会大家讲解系统的讲解Vmware知识点,看完这系列文章会让你对Vmware有更加清晰的理解和运用。
多线程注意事项
如果你的应用程序是多线程实现,那么你应该将 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_CloseThread 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 上进行并发读取是不被允许的。
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号