Libre Graphics Meeting 2026, tj. čtyřdenní konference a setkání vývojářů a uživatelů svobodných a otevřených grafických softwarů, proběhne od 22. do 25. dubna v Norimberku. Dění lze sledovat na Mastodonu.
Vývojář Alexandre Gomes Gaigalas na GitHubu zveřejnil c89cc.sh, parser a kompilátor jazyka C89 napsaný v pouhém jediném skriptu o přibližně 8000 řádcích čistého bashe (bez dalších externích závislostí), který generuje ELF64 binárky pro x86-64. Jedná se o velmi jednoduchý kompilátor, který nepodporuje direktivy #include a dokonce ani funkci printf (lze použít puts), všechny dostupné deklarace lze nalézt v proměnné _BUILTIN_LIBC na konci skriptu. Skript je volně dostupný pod ISC licencí.
Francouzská vláda oznámila, že v rámci strategie 'digitální suverenity' zahájí 'přechod od systému Windows k počítačům s operačním systémem Linux' (sa sortie de Windows au profit de postes sous système d'exploitation Linux). DINUM (meziresortní ředitelství pro digitální technologie) požádalo ministerstva, aby do podzimu 2026 vypracovaly konkrétní plány nasazení Linuxu. Francie již dříve migrovala části státní správy na otevřená řešení.
Nezisková organizace Electronic Frontier Foundation (EFF) hájící občanské svobody v digitálním světě po téměř 20 letech opouští platformu X (dříve Twitter). Na platformách Bluesky, Mastodon, LinkedIn, Instagram, TikTok, Facebook, Threads a YouTube zůstává.
Terminálový textový editor GNU nano byl vydán ve verzi 9.0. Vylepšuje chování horizontálního posouvání pohledu na dlouhé řádky a chování některých klávesových zkratek. Více v seznamu změn.
Ministerstvo financí ve spolupráci s finanční správou dnes představilo beta verzi aplikace využívající umělou inteligenci pro předvyplnění daňového přiznání. Není třeba přepisovat údaje z různých potvrzení, ani hledat správné řádky, kam údaje napsat. Stačí nahrát dokumenty a využít AI.
Výrobce počítačových periferií Keychron zveřejnil repozitář se schématy šasi klávesnic a myší. Licence je restriktivní, zakazuje většinu komerčních užití a v podstatě jsou tak data vhodná pouze pro výukové účely, hlášení a opravy chyb, případně výrobu vlastního příslušenství.
Správce balíčků APT, používaný v Debianu a odvozených distribucích, byl vydán ve verzi 3.2 (seznam změn). Mezi novinkami figurují nové příkazy pro práci s historií, včetně vracení transakcí.
Společnost Anthropic oznámila Projekt Glasswing a s ní související AI model Claude Mythos Preview. Jedná se o iniciativu zaměřenou na kybernetickou bezpečnost, do které se zapojily velké technologické společnosti Amazon Web Services, Anthropic, Apple, Broadcom, Cisco, CrowdStrike, Google, JPMorganChase, Linux Foundation, Microsoft, NVIDIA a Palo Alto Networks. Anthropic věří, že nový AI model Claude Mythos Preview dokáže
… více »Firma Ojective Development vydala svůj nástroj pro monitorování a řízení odchozích síťových připojení Little Snitch i pro operační systém Linux. Linuxová verze se skládá ze tří komponent: eBPF program pro zachytávání provozu a webové rozhraní jsou uvolněny pod GNU GPLv2 a dostupné na GitHubu (převážně Rust a JavaScript), jádro backendu je proprietární pod vlastní licencí, nicméně zdarma k použití a redistribuci (cena přitom normálně … více »
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: