0

我正在使用“pthread”库在 C++ 中编写一个多线程程序,但是当我在 Ubuntu 虚拟机上执行它时,尽管我有一个多核处理器(i7-2630QM),但我的线程似乎并没有并行运行。 . 代码太长了,所以我将用这个简单的代码来解释我的问题:

#include <iostream>
#include <pthread.h>
using namespace std;

void* myfunction(void* arg); //function that the thread will execute

int main()
{
    pthread_t thread;
    pthread_create(&thread, NULL, myfunction, NULL); //thread created
    for (int i=0; i<10; i++) //show "1" 10 times
         cout << "1";
    pthread_join(thread, NULL); //wait for the thread to finish executing
    return 0;
}

void* myfunction(void* arg)
{
    for (int j=0; j<10; j++) //show "2" 10 times
         cout << "2";
    return NULL;
}

当我在主机操作系统(带有 VC++2010 的 Windows 7)上运行此代码时,我得到类似的结果12212121211121212...,这是多线程应用程序应该做的,但是当我在来宾操作系统上运行相同的代码时(Vmware 上的代码::块)我总是得到11111111112222222222!AFAIK 线程应该与 main() 函数并行运行,而不是顺序运行。我的VM的核数设置为4,但是程序好像只用了一个核,不知道是什么问题?是代码还是...?我在这里错过了什么吗?感谢您的帮助,提前感谢,请原谅我的英语:/

4

2 回答 2

0

Windows 和 Linux CRT/STDC++ 库具有不同的同步行为。您无法通过调用cout. 编写一些实际的并行计算并测量经过的时间以了解发生了什么。

于 2012-12-29T02:00:19.813 回答
0

使用信号量(全局或作为参数传递给我的函数)正确同步线程。由于操作系统之间的调度特性不同,您可能会遇到时间问题(这本身并不是一个真正的问题)。在调用 pthread_create 之后让第一个线程在信号量上等待,并让新线程在输入 myfunction 后立即发出信号。

此外,您的循环很短,使它们花费更长的时间。

这里的例子

于 2012-12-29T01:47:46.527 回答