Není to moc komplikované na to, že chci v podstatě mít jen mutex + nějakou instanci?
Nestačilo by něco jako toto?
https://godbolt.org/z/vTv8Yeznb
Jako přiznám se, že právě komplikovaný kód v C++ je jedna z věci, proč jsem začal některé věci dělat v Rustu a Go. Moc nechápu, proč bych si měl psát custom alokátor jen kvůli tomu, že chci k něčemu přidat mutex.
Akorát to moc neumožňuje převzít existující objekt (včetně podpory weak_ptr a custom deleteru pro tento případ), a pokud bys to řešil přes další pointer, další level indirekce.
Ale ano, tak nějak vypadala ta první verze, co jsem psal "na zelené louce". Kdybych to měl rozpracovat do kompletního API, nebude to o moc kratší. Jde jen o to, jestli uložím mutex spolu s objektem, který chráním, nebo ho stčím do control blocku. Tvé řešení je maličko jednodušší v případě, že bych používal make_shared_lockable. V případě ale kdy potřebuju adaptovat existující objekt, tak je to v koncích.
Objevil sem tenhle blog dneska, ten tvuj spusob vynucuje pointery, coz muze byt zbytecne neco podobneho jsem resil pred nejakou dobou cca takto: https://godbolt.org/z/Tco6azKj5
(toto je na rychlo sepsana verze, melo by se to ucesat, ale nevynucuje to pointery, pristup je private, dal by se parametrizovat typ mutexu, ....).
Postupem casu jsem si spise oblibil predat proste lambdu s tim co se ma provest za akce a tu predat strukture, ktera nejdriv zamkne a pak provola lambdu.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím 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íjím serverové komponenty a informační systémy v C++
Přečteno 51 064×
Přečteno 23 939×
Přečteno 22 871×
Přečteno 20 953×
Přečteno 17 760×