Kdo neche psát sám, tak plno těchto tříd je už implementováno např. v libguarded. Psal jsem to už u minulého článku, tak se omlouvám za spam.
https://github.com/copperspice/cs_libguarded
https://www.copperspice.com/docs/cs_libguarded/lib-api.html
Na druhou stranu musím říct, že jsem nějaké obecné zamykání nikdy moc nemusel použít ani u vícevláknových aplikací. Tak by mně zajímalo, jestli to někdo moc využije.
To určitě nerozporuji. Vsadím se, že na všechno někde existuje knihovna, nejen jedna. Ale nejsem velký kamarád programování ve stylu "lepení knihoven", vždycky to musí mít nějaký smysl.
Pořád ale má smysl to rozebírat, protože jsem zastánce hesla "there is no magic". Tedy je dobré vědět jak to funguje a proč to funguje a co bylo cílem, že byl zvolen takový návrh.
Co se obecného zamykání týče, tak používám spíš svůj prvně představený nástroj, kde používám sdílené zamykací pointery. Má to výhodu, že třídy navrhuji bez zámků a teprve ve finálním nasazení, když zjistím, že nějakou třídu potřebuji sdílet mezi vlákny, tak nasadím ten obecený nástroj.
A já docela jo. Typický use case je, když máš nějaký dlouho trvající výpočet a pak rozhraní (třeba http), kterým se chodíš dívat na stav toho výpočtu. Jako příklad uvedu tradingového bota, kde se výpočet odvíjí od stavu trhu, cenových informacích a událostí, tedy jde o událostně řízený běh. Tedy ta instance není trvale zamčená, ale zamyká se po dobu zpracování události. A k tomu paralelně chodí dotazy na stav obchodování z http rozhraní od uživatele / operátora. Stav jedné "strategie" je objekt, který sdílím mezi http rozhraní a nějakým řídícím objektem a k tomu používám právě spíš shared_lockable_ptr.
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 50 600×
Přečteno 23 672×
Přečteno 22 663×
Přečteno 20 631×
Přečteno 17 621×