【发布时间】:2016-08-20 21:29:34
【问题描述】:
我想打印一个用 C++11 编写的多线程程序设置的 {0, 1, 2, 3} 的排列。
源码是这样的:
#include <iostream>
#include <stdio.h>
#include <thread>
#include <vector>
#include <chrono>
using namespace std;
void func(int index);
int main()
{
vector<thread> threads;
for (int i = 0; i < 4; i++)
{
auto var = [&]()
{
return func(i);
};
threads.push_back(thread(var));
}
for (auto& thread : threads)
thread.join();
}
void func(int index)
{
cout << index;
for (int i = 0; i < 10000; i++);
}
我希望输出的排列为 0123,但我收到了奇怪的结果,如下所示:
0223
0133
0124
我不明白这种奇怪的行为,尤其是我无法解释数字 4 的存在。
这可能是初学者的错误,我还是谢谢大家会帮助我。
【问题讨论】:
-
[OT]:使用睡眠方法代替
for (int i = 0; i < 10000; i++);。 -
顺便说一句,获得随机排列的更好方法是使用
std::shuffle。 -
感谢 Jarod42 的评论,但对我来说真正的目标不是创建排列,而是了解这个多线程进程的行为。
标签: c++ multithreading c++11 permutation