以下程序根据使用的睡眠机制运行不同。
#include <ppltasks.h>
#include <chrono>
#include <thread>
#include <iostream>
#include <atomic>
#include <windows.h>
using namespace std;
#define MODERN_MAN
int main()
{
atomic<int> cnt;
concurrency::task_group tg;
for (int i =0; i<1000; ++i )
{
tg.run([&cnt](){cout << "."; cnt++;
#ifdef MODERN_MAN
this_thread::sleep_for(chrono::seconds(5));
#else
Sleep(5000);
#endif
});
}
tg.wait();
cout << cnt;
return 0;
}
不同之处在于,sleep_for
从我所看到的任务安排中,1 睡眠不会阻止其他人运行。
从Sleep
我看到的情况来看,他们阻止了进一步的任务运行。
我的问题是:
a)PPL 线程池如何巧妙地解决问题sleep_for
(我认为这是一个告诉操作系统的系统调用(将此线程放在非活动线程列表中 x 秒)
b)我在这里看到的行为是否有sleep_for
保证(也就是它是否定义了我不会得到与 with 相同的行为Sleep
)