Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.
Národní bezpečnostní tým CSIRT.CZ koordinovaný sdružením CZ.NIC přichází se službou Strážci internetu, která má sjednotit způsob hlášení doménových jmen zneužívaných k páchání trestné činnosti. Službu mohou uživatelé využívat také prostřednictvím rozšíření do prohlížeče. Nový nástroj podporuje jak hlášení vyžadující autorizaci, tak anonymní reporting, u kterého však nebude možné zapojit takovou míru automatizace jako u
… více »Firefox pro iOS přichází s integrovaným blokováním reklam. Funkce je ve výchozím nastavení vypnutá a lze ji aktivovat v Settings > Browsing > Ad Blocker.
Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila (𝕏) open-source robota Microduck. Předobjednat jej lze za 340 eur.
Open-source autonomní AI agent OpenClaw (Wikipedie) byl vydán ve verzi 2026.8.1 aneb 2.0. Přehled novinek v poznámkách k vydání.
Byla vydána první veřejná preview verze PrusaSliceru 3.0. Přesně 15 let po zveřejnění první verze Slic3ru, které připadlo na 1. září 2011. Jedná se o dosud největší upgrade PrusaSliceru: "Řídili jsme se tím, co skutečně potřebujete, a tak jsme například zcela zahodili stávající uživatelské rozhraní a vytvořili ho znovu od nuly. Přinášíme také nový systém projektů, kompletně přepracované profily navržené pro moderní tiskárny s větším
… více »Byl vydán Mozilla Firefox 155.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze Smart Window, zatím ale dostupné pouze pro uživatele v USA, Kanadě a Francii. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 155 bude brzy k dispozici také na Flathubu a Snapcraftu.
Tima Cooka na pozici generálního ředitele společnosti Apple dnešním dnem nahradil John Ternus, který byl dosud odpovědný za hardware. Tim Cook vedl Apple od roku 2011, kdy funkci převzal od později zesnulého spoluzakladatele společnosti Stevea Jobse. Za 15 let v čele Applu více než zdvojnásobil tržní hodnotu firmy.
Organizátoři konference LinuxDays ukončil veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata pro letošní ročník. Hlasovat můžete do pondělí 7. září, poté bude podle výsledků hlasování sestaven program pro letošní ročník.
Servo, engine webového prohlížeče napsaný v Rustu, byl vydán ve verzi 0.5.0. Novinky shrnuje přehled projektu za červenec. Došlo k dalšímu pokroku ve vykreslování webových stránek. Současným cílem projektu je vytvořit komponentu webového prohlížeče jako WebView pro použití v jiných aplikacích.
1. volatile globalna premenna (event): "process_end" 2. pocitadlo referencii pracovnych vlakien (atomic_inc pri vytvoreni vlakna, atomic_dec pri ukonceni vlakna) 3. pracovne vlakno nemoze byt vytvorene, ak process_end == 1 (stale je tu race condition, ked otestujeme premennu process_end == 0, a nasledne vytvorime vlakno, no v medzikroku sa vsak process_end nastavi na 1) 4. pracovne vlakno pred cakanim na mutex otestuje, ci process_end == 1, ak ano, ukoncuje sa 5. hlavne vlakno caka v cykle na dekrement poctu vlakien do nuly (tu treba nejaky timeout) 6. hlavne vlakno uvolnuje mutexyExistuje nejake ine, elegantnejsie riesenie, bez race conditions a bez potreby timeoutu? Moja (idealna) predstava je nasledovna:
1. hlavne vlakno uvolni mutexy (pocitadlo referencii na mutex v kerneli vsak vie, ze ine vlakna este mutex vlastnia alebo cakaju nan) 2. pracovne vlakno pri mutex_lock dostane return value "MUTEX_RELEASED" a prejde k svojmu ukonceniu, v ktorom dekrementuje ref_count na pocet vlakien 3. hlavne vlakno po uvoleneni mutexov caka na dekrement poctu vlakien do 0.Tento design vsak pouzit so sucasnym navrhom mutexov, spinlockov, atd. nemozno pouzit.
Volatile v souvislosti s mutithreadingem je vždy chyba, nepoužívej volalile pro synchronizaci, nefunguje to. Volatile se prakticky používá pouze k přímému přístupu k hardware (HW registry mapované do paměti).
Neexistuje jediné obecné řešení, záleží na konkrétním designu tvé aplikace. Obvykle se to dělá tak, že máš nějaký main thread, který zpracovává eventy a pak jednotlivé workery (thready), kterým se z main threadu přiděluje práce. Potom je to jednoduché, main thread dostane event, že se má aplikace ukončit a vyřídí ho. Pokud workery spí, nastaví jim příznak, že mají skončit a probudí je. Každý worker se po probuzení na ten přiznak podívá a pokud se má ukončit, tak skončí. Main thread pak jen udělá join na všechny workery. Pokud workery nespí a něco dělají, je to v zásadě stejné, main thread jim nastaví příznak k ukončení a zase udělá join na všechny workery. Je pak zodpovědnost workera, aby ten příznak čas od času zkontroval a ukončil se.
Pokud ale máš nějaký zásadně jiný design aplikace, tak to budeš muset udělat nějak jinak.
Souhlas, akorát:
Je pak zodpovědnost workera, aby ten příznak čas od času zkontroval a ukončil se.
tady se to může zaseknout na nějaké síťové operaci a ta může trvat i dost dlouho. Není nějaká možnost, jak v rámci procesu vyvolat výjimku/chybu na všech síťových spojeních a tím to ukončit dřív?
Na druhou stranu, tohle je pak zase v rozporu požadavkem na konzistenci. To čekání na konec síťové operace má svůj smysl a jen tak ta spojení pozabíjet může nadělat škody.
Pamatuji si třeba DB klienta s Oracle ovladačem, kde když se rozpadlo síťové spojení (třeba po uspání nebo i jinak), tak to trvalo klidně i několik minut, než to vzdal a prohlásil spojení za neplatné a umožnil se připojit znova. Do té doby byla aplikace nepoužitelná, takže ji uživatel většinou celou natvrdo sestřelil a spustil znova, což bylo rychlejší.
Chápu, že je za tím snaha dokončit případnou transakci a neztratit data předčasným/násilným odpojením, ale z hlediska UI to bylo dost špatné, protože to neumožňovalo okamžité odpojení na žádost uživatele (i za cenu případné ztráty dat z poslední transakce).
Není nějaká možnost, jak v rámci procesu vyvolat výjimku/chybu na všech síťových spojeních a tím to ukončit dřív?Asi by například šlo všechny socket fd dávat do nějakýho globálního kontejneru a při ukončování na případný zbylý sockety zavolat
shutdown() (a příp. close()) ...
Volatile používáš k předání informace do jiného threadu, ale to je úplně blbě, k tomu volatile neslouží a nebude to spolehlivě fungovat. Volatile použité v souvislosti s multithreadingem je prakticky vždy chyba.
Nějak tomu workeru musíš předat informaci o tom, že se má ukončit. Je pak zodpovědností workera, že se opravdu ukončí. K předání informace o ukončení stačí nějaký bool flag (atomic nebo obyčejná proměnná pod mutexem). Worker ten flag musí čas od času zkontrovat, to je taky jeho zodpovědnost. Pokud je worker uspaný (nemá co dělat, čeká na práci), tak je zodpovědností main threadu, který mu práci přiděluje, aby ho probudil. No a worker si po probuzení zkontroluje, zda se má ukončit. Condition variable se používá k signalizaci workeru, že má něco dělat. Co konkrétně worker udělá, to už condition variable neřeší, to je věc implementace.
Elementární příklad: https://pastebin.com/EjuxC0zB
1. worker thread moze cakat na rozne eventy a tieto eventy prebudit 1.1 main thread by mal signalizovat vsetky tieto eventy 1.2 worker thread by mal dostatocne casto kontrolovat premennu ukoncenia procesu 2. worker thread moze cakat aj na mutex bez conditional variable alebo semafora 2.1 main thread nema ako signalizovat opustenie mutexu, musi len pouzit timeout 2.2 main thread musi cakat, kym ziaden worker thread opusti sekciu ochranenu mutexom, na ktoru worker thready cakali 2.3 na zrychlenie opustenia kritickej sekcie v bode 2.2 je dobre tiez na jej zaciatku kontrolovat "end_process" premennu (priklad: 100 threadov pristupuje ku kritickej sekcii, ktora trva 10ms => celkovo by main thread musel cakat viac ako 1s)
status = mutex_lock(...);
if (MUTEX_ABANDONED == status) {
/* do cleanup here and terminate the current thread */
}
Teraz ku condition variable. Neviem, ako si to myslel, ale cakanie na condition variable vyzaduje cakanie na event. Na jeden event. Inak povedane, ak cakam na condition variable "data ready", nemozem cakat na condition "end of process".Co ty tvoje worker thready dělají? Pokud čekají někde na nějaké síťové I/O, tak by možná byl dobrý nápad použít
epoll(), protože pak můžeš do jednoho epoll-based event loopu naházet nějaké sockety atd. a zároven eventfd deskriptory pro signalizaci nějakých vlastních stavů, jako třeba ukončení apod. epoll pak čeká paralelně na všechny změny stavů, které chceš sledovat. (Také mu můžeš nastavit timeout, pokud to budeš potřebovat.) Nebudeš se pak muset babrat s condition variables apod.
Volatile v souvislosti s mutithreadingem je vždy chyba, nepoužívej volalile pro synchronizaci, nefunguje to. Volatile se prakticky používá pouze k přímému přístupu k hardware (HW registry mapované do paměti).Uz jste videl nejaky kod pouzivajici RCU, pripadne knihovnu liburcu?
Volatile samo o sobě nelze použít pro sychronizaci mezi threadyJeste pred chvili jsi psal neco jineho:
Volatile v souvislosti s mutithreadingem je vždy chyba
Tiskni
Sdílej: