#include <iostream>
#include <vector>
#include <future>
#include <cstdio>
void for_print(int num) {
// std::this_thread::sleep_for(std::chrono::seconds(1));
for (int i = 0; i < 100; i++)
fprintf(stderr, "%d번 Thread : %d\n", num, i);
}
int main() {
for (size_t i = 0; i < 100; i++)
std::async(std::launch::async, for_print, i);
return 0;
}
멀티쓰레드로 실행되지 않음. (하나씩 동기 실행됨)
int main() {
for (size_t i = 0; i < 100; i++)
std::future<void> f = std::async(std::launch::async, for_print, i);
return 0;
}
멀티쓰레드로 실행되지 않음. (하나씩 동기 실행됨)
int main() {
std::vector<std::future<void>> v_async;
v_async.reserve(100);
for (size_t i = 0; i < 100; i++)
v_async.emplace_back(std::async(std::launch::async, for_print, i));
return 0;
}
비동기로 실행됨. (멀티 쓰레드)
int main() {
std::future<void> f[100];
for (size_t i = 0; i < 100; i++)
f[i] = std::async(std::launch::async, for_print, i);
return 0;
}
비동기로 실행됨. (멀티 쓰레드)
async의 반환값인 future 객체의 생명주기와 비동기 실행에 연관성이 있는 것으로 보임.
생명주기가 끝나면서 wait 하는것으로 예상. (소멸자 호출 -> wait)
int i =0;
void test()
{
std::this_thread::sleep_for(std::chrono::seconds(3));
printf("%d\n",i++);
}
int main()
{
auto a = std::async(std::launch::async, test);
auto b = std::async(std::launch::async, test);
auto c = std::async(std::launch::async, test);
std::async(std::launch::async, test);
}
실행 시간 3초 (0,1,2,3 동시 출력)
int main()
{
auto a = std::async(std::launch::async, test);
auto b = std::async(std::launch::async, test);
std::async(std::launch::async, test);
std::async(std::launch::async, test);
}
실행시간 6초 (0,1,2 출력 -> 3출력)
int main()
{
{
auto a = std::async(std::launch::async, test);
auto b = std::async(std::launch::async, test);
}
std::async(std::launch::async, test);
std::async(std::launch::async, test);
}
실행시간 9초 (0,1 출력 -> 2 출력 ->3출력)
std::future<void> a,b;
int main()
{
{
a = std::async(std::launch::async, test);
b = std::async(std::launch::async, test);
}
std::async(std::launch::async, test);
std::async(std::launch::async, test);
}
실행시간 6초 (0,1,2 출력 -> 3출력)
'메모장 > C++' 카테고리의 다른 글
[C++/etc] 키워드 사전 (수정중) (0) | 2022.11.23 |
---|---|
[C++] 스마트 포인터 메모 (0) | 2022.11.17 |
[C++] 구조체의 크기 (size of struct) (4) | 2020.11.18 |
[C, C++] 표준 입출력 실험 (scanf) (0) | 2019.09.03 |
C++/STL List를 순회하는 방법 (0) | 2019.05.24 |