A nebude ten thread safety příznak něco podobného? Policy ve skutečnosti se odkazuje na třídu, která dodatečně implementuje ona pravidla, která policy představují.
Rozšíření parametrů šablony není problém, nikdo vám nebrání udělat si
template<typename T> using dtask = task<T, resumption_policy::dispatcher>
a od toho okamžiku používat dtask<> místo task<>. Trochu záměrně nezmíněnou vlastností mé implementace je, že jakýkoliv task<T, policy> lze později převést na task<T, void>, ten se zkráceně dá zapsat jako task<T>, takže uživatel takové korutiny už nepotřebuje řešit policy,
Jak jsem psal, ten návrh jsem udělal namísto původně rozpracovaného jiného návrhu, který je nyní pod policy resumption_policy::queue, kde právě ono obnovení korutiny je signalizováno - korutina je vložena do lokální fronty - a jakmile je vlákno volné, může se věnovat frontě a postupně jednu po druhé provede. Ale takový systém je víc vázán na konkrétní, mnou dodaný runtime. Místo toho jsem pak šel cestou obecnější, kdy právě v návrhu umožňuji aby korutina si sama mohla vybrat jak bude buzena. Dokážu si představit implementacu dispatch-like aplikace, kde budu mít jedno hlavní vlákno a v něm se bude spouštět většina korutin všechny vázané na dispatcher policy a to aniž bych musel upravit jedinou čárku kódu v mé knihovně.
Právě snaha minimalizovat runtime, nechat implementační volnost je možná důvod, proč se toto v C++ neřeší.
Ještě k move semantics. Používám na denní bázi a nemyslím si, že by to bylo málo muziky. Naopak vytrhalo dost trnů z pat.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjim vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvýjim serverové komponenty a informační systémy v C++
Přečteno 47 035×
Přečteno 21 973×
Přečteno 19 706×
Přečteno 15 938×
Přečteno 14 229×