我用 C++ 编写了一个字符串排序程序,我的问题是它基本上是从一个 txt 文件中读取一些字符串块并放入一个向量并对字符串进行排序。首先,我使用单线程程序测量了排序执行时间。然后我将向量分成两个部分,并使用两个线程对它们进行排序。但问题是多线程程序比单线程程序需要更多的时间来执行。有人可以解释一下是什么原因吗?...谢谢。
顺便说一句,字符串向量包含 20 个字符长 100 万个字符串记录,我还没有添加文件读取功能。
单线程程序..
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
#include <intrin.h>
#pragma intrinsic(__rdtsc)
using namespace std;
vector<string> ReadFile();
int main()
{
vector<string> RandomStringVector;
unsigned __int64 t1,t2;
RandomStringVector = ReadFile();
t1 = __rdtsc();
sort(RandomStringVector.begin(),RandomStringVector.end());
t2 = __rdtsc();
printf_s("%I64d ticks\n", (t2 - t1)/1000000);
system("pause");
return 0;
}
这是多线程程序
#include <process.h>
#include <windows.h>
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
#include <intrin.h>
#pragma intrinsic(__rdtsc)
using namespace std;
void SortString(void * arg);
vector<string> ReadFile();
int main(){
vector<string> FullStringVector;
FullStringVector = ReadFile();
vector<string> v1(FullStringVector.begin(), FullStringVector.begin() + FullStringVector.size()/2),
v2(FullStringVector.begin() + FullStringVector.size()/2 +1, FullStringVector.end());
_beginthread( SortString, 0, (void *)&v1);
_beginthread( SortString, 0, (void *)&v2);
system("pause");
return 0;
}
void SortString(void *arg)
{
unsigned __int64 t1,t2;
vector<string> * StringVector;
vector<string> SortedStringVector;
StringVector = (vector<string> *)arg;
SortedStringVector = *StringVector;
t1 = __rdtsc();
sort(SortedStringVector.begin(),SortedStringVector.end());
t2 = __rdtsc();
printf_s("%I64d ticks\n", (t2 - t1)/1000000);
}