Operating system VMWare上具有相同来宾操作系统、不同主机操作系统的线程同步行为

Operating system VMWare上具有相同来宾操作系统、不同主机操作系统的线程同步行为,operating-system,pthreads,vmware,virtual-machine,Operating System,Pthreads,Vmware,Virtual Machine,我是计算机科学课程的助教,遇到了一个有趣的问题。最近的一项任务涉及pthread的同步技术。学生们必须使用互斥锁、障碍、条件变量等来避免死锁。。。每个学生都在VMWare虚拟机上运行相同版本的Ubuntu,可以是工作站,也可以是Fusion,具体取决于他们的系统。显然,每个学生的主机操作系统可能不同 现在让人困惑的是:一些学生的同步行为与我运行他们的程序时看到的非常不同。对于一些学生,我可能会运行她的作业,并立即看到死锁。然而,当她在家里运行它时,她从未遇到过僵局 根据我的理解,死锁行为似乎只依

我是计算机科学课程的助教,遇到了一个有趣的问题。最近的一项任务涉及pthread的同步技术。学生们必须使用互斥锁、障碍、条件变量等来避免死锁。。。每个学生都在VMWare虚拟机上运行相同版本的Ubuntu,可以是工作站,也可以是Fusion,具体取决于他们的系统。显然,每个学生的主机操作系统可能不同

现在让人困惑的是:一些学生的同步行为与我运行他们的程序时看到的非常不同。对于一些学生,我可能会运行她的作业,并立即看到死锁。然而,当她在家里运行它时,她从未遇到过僵局

根据我的理解,死锁行为似乎只依赖于来宾操作系统的调度程序。主机操作系统应该与此无关。然而,即使我们都有相同的客户操作系统,问题仍然存在。有人知道为什么会这样吗


谢谢

听起来这个学生有一个不确定的死锁。这是非常常见的,基本上有一个小窗口,代码可能会死锁,但在其他情况下,应用程序运行正常。她很幸运,但你没有

小的调度时间可能是罪魁祸首您的CPU可能有不同的时钟速度,或不同的内核数,或不同的后台负载,或其他,这足以改变调度


这实际上是一个典型的问题多线程代码在测试环境中运行良好,但在生产环境中遇到问题,原因是测试中从未出现过竞争条件。

我假设您的虚拟机配置为仅使用一个虚拟核心,以便它可以在任何主机上运行。如果是这样,那么您可以正确地假设来宾操作系统的调度程序负责学生作业的每一次抢占

然而,调度器本身受其运行的硬件平台的严重影响。不同的系统将更快或更慢地运行来宾操作系统,或者产生硬件中断,需要不同的时间来处理或模拟。所有这些都会影响来宾操作系统的调度决策


我真的很喜欢您如何分发VM,以确保每个人都有相同的开发和运行时环境来完成任务。但是,因为每个人都有相同的软件并不意味着他们会看到同样的行为。

你也需要考虑主机本身。我曾经有过一个相同的CPU案例,但我认为它的英特尔芯片组版本略有不同。这意味着在一个VM中,任务开关寄存器在KVM中进行了优化,而在另一个KVM中无法进行优化。这导致客户机中似乎相同的虚拟机和主机的时间不同

还要记住,主机可能在不同的时间运行页面共享进程或任何其他事情,这可能会改变来宾系统中的时间安排

在valgrind下运行来宾线程程序会很有趣。由于速度非常慢,线程应用程序经常会出现计时问题