Сообщение Re[7]: Вопрос по корутинам от 26.08.2025 10:35
Изменено 26.08.2025 11:12 rg45
Re[7]: Вопрос по корутинам
Здравствуйте, kov_serg, Вы писали:
_>Это слишком простой пример. Тут никаких особых гарантий не надо, т.к. они не используют общих ресурсов и даже не выделяют их для выполнения зачачи.
_>Простой вопрос кто должен выделять и освободлать ресурсы исполнитель илипрораб тот кто поставил задачу должен предоставить ресурсы для её выполнения?
Ты сомневаешься, что вызываемая корутина корректно завершает время жизни своего внутреннего состояния? На счёт этого можешь быть спокоен:
http://coliru.stacked-crooked.com/a/9e5ecbe772104372
Output:
_>Это слишком простой пример. Тут никаких особых гарантий не надо, т.к. они не используют общих ресурсов и даже не выделяют их для выполнения зачачи.
_>Простой вопрос кто должен выделять и освободлать ресурсы исполнитель или
Ты сомневаешься, что вызываемая корутина корректно завершает время жизни своего внутреннего состояния? На счёт этого можешь быть спокоен:
http://coliru.stacked-crooked.com/a/9e5ecbe772104372
#include <concepts>
#include <generator>
#include <iostream>
class life_time_indicator
{
public:
life_time_indicator(const std::string id) : id(id) { std::cout << id << " constructed" << std::endl; }
~life_time_indicator() { std::cout << id << " destructed" << std::endl; }
life_time_indicator(const life_time_indicator&) = delete;
life_time_indicator& operator = (const life_time_indicator&) = delete;
private:
std::string id;
};
template <std::incrementable T>
std::generator<const T&> infinite_sequence(T t, const std::string& id) {
life_time_indicator indicator{id};
for (;;)
co_yield t++;
}
int main()
{
for (auto t : infinite_sequence(1, "Numbers")) {
std::cout << t << ' ';
if (t == 10)
break;
}
std::cout << std::endl;
for (auto t : infinite_sequence('A', "Letters")) {
std::cout << t << ' ';
if (t == 'Z')
break;
}
std::cout << std::endl;
}
Output:
Numbers constructed
1 2 3 4 5 6 7 8 9 10 Numbers destructed
Letters constructed
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Letters destructed
Re[7]: Вопрос по корутинам
Здравствуйте, kov_serg, Вы писали:
_>Это слишком простой пример. Тут никаких особых гарантий не надо, т.к. они не используют общих ресурсов и даже не выделяют их для выполнения зачачи.
_>Простой вопрос кто должен выделять и освободлать ресурсы исполнитель илипрораб тот кто поставил задачу должен предоставить ресурсы для её выполнения?
Ты сомневаешься, что вызываемая корутина корректно завершает время жизни своего внутреннего состояния? На счёт этого можешь быть спокоен:
http://coliru.stacked-crooked.com/a/9e5ecbe772104372
_>Это слишком простой пример. Тут никаких особых гарантий не надо, т.к. они не используют общих ресурсов и даже не выделяют их для выполнения зачачи.
_>Простой вопрос кто должен выделять и освободлать ресурсы исполнитель или
Ты сомневаешься, что вызываемая корутина корректно завершает время жизни своего внутреннего состояния? На счёт этого можешь быть спокоен:
http://coliru.stacked-crooked.com/a/9e5ecbe772104372
#include <concepts>
#include <generator>
#include <iostream>
class life_time_indicator
{
public:
life_time_indicator(const std::string id) : id(id) { std::cout << id << " constructed" << std::endl; }
~life_time_indicator() { std::cout << id << " destructed" << std::endl; }
life_time_indicator(const life_time_indicator&) = delete;
life_time_indicator& operator = (const life_time_indicator&) = delete;
private:
std::string id;
};
template <std::incrementable T>
std::generator<const T&> infinite_sequence(T t, const std::string& id) {
life_time_indicator indicator{id};
for (;;)
co_yield t++;
}
int main()
{
for (auto t : infinite_sequence(1, "Numbers")) {
std::cout << t << ' ';
if (t == 10)
break;
}
std::cout << std::endl;
for (auto t : infinite_sequence('A', "Letters")) {
std::cout << t << ' ';
if (t == 'Z')
break;
}
std::cout << std::endl;
}
Numbers constructed
1 2 3 4 5 6 7 8 9 10 Numbers destructed
Letters constructed
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Letters destructed