abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 14:22 | Bezpečnostní upozornění

    Byly zveřejněny informace o kritické zranitelnosti CVE-2026-64600 pojmenované RefluXFS (technické detaily) v XFS. Je tam již od verze Linuxu 4.11, tj. rok 2017. Jedná se o lokální eskalaci práv. Neprivilegovaný uživatel může editovat libovolný soubor, například klidně zrušit rootovské heslo v /etc/passwd. Videoukázka na Vimeo. V upstreamu je zranitelnost opravena.

    Ladislav Hagara | Komentářů: 3
    včera 13:46 | IT novinky

    OpenAI / ChatGPT má dnes výpadky (OpenAI Status, DownDetector).

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Komunita

    Poskytovatel hostingu svobodných/open-source projektů Codeberg po hlasování na valné hromadě vydal stanovisko k využívání LLM. Kvůli vytěžování infrastruktury a rostoucím cenám hardwaru, ale také hrozbám pro spolupráci v komunitě se k LLM staví kriticky. Nebude poskytovat hosting projektů vytvářených LLM agenty.

    |🇵🇸 | Komentářů: 0
    24.7. 14:22 | Zajímavý projekt

    Jack Dorsey představil (𝕏) open source týmovou komunikační platformu Buzz (GitHub) s cílem snížit závislost na Slacku a GitHubu.

    Ladislav Hagara | Komentářů: 19
    23.7. 23:00 | Nová verze

    Poštovní klient Thunderbird byl vydán v nové verzi 153 s kódovým názvem Meadow. Jedná se o ESR (Extended Support Release) vydání. Přehled novinek v poznámkách k vydání. Vylepšuje OAuth. Thundermail lze používat bez instalace doplňku.

    Ladislav Hagara | Komentářů: 0
    23.7. 22:22 | Zajímavý článek

    AI tento rok naplno vtrhla do vývoje softwaru a výrazně ovlivňuje také open source projekty. Jiří Eischmann v příspěvku Jak mění AI open source na svém blogu rozebírá několik trendů, které v open source v poslední době v souvislosti s AI pozoruje, a jak tyto trendy svět otevřeného softwaru mění (Inflace projektů, Zahlcení kontroly, Klesající motivace zveřejňovat kód).

    Ladislav Hagara | Komentářů: 17
    23.7. 22:00 | IT novinky

    Evropská komise (EK) vyměřila americké internetové společnosti Google pokutu 890 milionů eur (21,5 miliardy Kč) za porušení unijního nařízení o digitálních trzích (DMA). Firma se podle unijní exekutivy provinila tím, že ve vyhledávači Google Search upřednostňovala vlastní služby a že podnikům ukládala omezení, která jim bránila nasměrovat spotřebitele k alternativním, často levnějším nákupním kanálům na platformě Google Play.

    … více »
    Ladislav Hagara | Komentářů: 2
    22.7. 19:44 | IT novinky

    Samsung na akci Galaxy Unpacked July 2026 (YouTube) představil své nové telefony Galaxy Z Fold8 Ultra, Fold8 a Flip8, hodinky Galaxy Watch Ultra2 a Watch9 a chytré brýle ve spolupráci s Gentle Monster a Warby Parker.

    Ladislav Hagara | Komentářů: 0
    22.7. 16:11 | IT novinky

    Po pěti letech vývoje vyšla česká počítačová hra Scarlet Deer Inn (ProtonDB). Scarlet Deer Inn je vyšívaná temná středověká pohádka. Zatímco život ve zdánlivě obyčejné vesnici se točí kolem běžných povinností a sousedských drbů, v podzemí se skrývají zlověstná tajemství.

    Ladislav Hagara | Komentářů: 2
    22.7. 13:33 | IT novinky

    Představen byl Raspberry Pi Touch Display 2 s uhlopříčkou 10 palců a rozlišením 1200 × 1920 pixelů. Cena je 80 dolarů.

    Ladislav Hagara | Komentářů: 11
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (17%)
     (30%)
     (5%)
     (6%)
     (2%)
     (15%)
     (24%)
    Celkem 2225 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: Plánovač periodických tasků v C

    8.3.2022 19:44 MilanC | skóre: 16
    Plánovač periodických tasků v C
    Přečteno: 1176×
    Ahoj,

    potřebuji vytvořit jakýsi jednoduchý periodický plánovač několika samostatných úloh v Cčku. Každá úloha se bude spouštět nekonečně krát v nějakém intervalu od několika sekund po hodiny. Na přesnosti až tak nezáleží. Hned jsem dostal nápad, udělat to pomocí vláken, kdy vždy 1 úloha = 1 vlákno a periodu řešit sleepem vlákna na daný čas. Trochu jsem ale narazil při ukončování programu/vláken, což mě napadlo řešit rozložením dlouhého intervalu na smyčku 1s sleepů s testem na ukončení vlákna. Má otázka zní, jestli to koncepčně nelze v Cčku udělat ještě nějak lépe?

    Tady je nástřel pro 2 vlákna... https://pastebin.com/5e4KPgjR

    Díky.

    Odpovědi

    8.3.2022 19:52 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Ten problém s ukončováním jsem myslel tak, že jsem tam měl původně sleep(args->delay), což se pak samozřejmě při nastavení sRunning na 0 nevykoná bezprostředně, ale při delší periodě až po jejím uplynutí. Toto jsem tedy řešil tím for cyklem, asi je to patrné.
    8.3.2022 20:27 MarV | skóre: 11
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Použil bych systémový časovač https://man7.org/linux/man-pages/man2/timer_create.2.html. V hlavním vlákně čekat na ukončovací podmínku a pak časovače zabít.
    9.3.2022 15:27 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Viz #2, nebo je také možné pro ukončitelné čekání použít poll(2) s timeoutem a pipe(2). (Vytvořím rouru, pollem v jednom procesu/vlákně čekám na příchozí data a ve druhém vlákně nebo třeba handleru signálu pro ukončení pošlu data.) Takové řešení se hodí, pokud už rourou (nebo soketem apod.) posíláme nějaký příkaz pro ukončení.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    11.3.2022 10:41 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Díky, díval jsem se na obě varianty a přijde mi to nějaké složité. :-) Zkusím to nějak blíž nastudovat. Ta varianta s timery by mohla být schůdná.
    11.3.2022 15:45 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    debian.plus@protonmail.com
    15.3.2022 09:50 Mayhem
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Kdyz uz to tedy musi byt v cecku, na vlakna se vykasli, to je overkill. Normalne naforkuj potrebny pocet procesu, v childu pouzij bud ohandlovany alarm nebo sleep a udelej, co potrebujes. V pripade potreby cekajici childy ukoncis zaslanim sigtermu. A zombie si v parentu uklidis zachycenim sigchld.
    15.3.2022 13:33 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Ahoj, šlo by to krapet více pro lamu případně odkázat na nějaký příklad? A ano v C to musí být, bohužel. :(
    15.3.2022 15:34 kvr
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Prostě místo pthread_create() použiješ fork() a pustíš ten child tam. Zbytek řešení by měl zůstat víceméně stejný. ... ne, že bych s tím souhlasil, pthread bude rozhodně efektivnější, na druhé straně chyba v pouštěné funkci shodí celý proces, zatímco v případě fork() jenom ten child.

    Jako to původní řešení fungovat bude, pominu-li to, že nebude pouštět každých n vteřin, ale n vteřin + doba operace té funkce. A samozřejmě neefektivní využití threadů, které nejspíš budou převážnou dobu jenom spát (což bude v rámci stovek threadů asi ok). Ideální by bylo použití nějakého threadpool, nejlépe který umí rovnou schedulovat podle času, něco jako Java https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html#scheduleAtFixedRate(java.lang.Runnable,long,long,java.util.concurrent.TimeUnit) . Letmým pohledem nedokážu nic najít pro čisté C. Něco naimplementovat asi nebude extra složité (buď timer_create nebo poll a schedulovat ručně, a k tomu normální threadpool), ale pořád složitější než původní řešení - otázkou je, stojí to za to?
    16.3.2022 09:38 Mayhem
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    ne, že bych s tím souhlasil, pthread bude rozhodně efektivnější, na druhé straně chyba v pouštěné funkci shodí celý proces, zatímco v případě fork() jenom ten child.
    Efektivnejsi? Mozna ano, ale uvedom si, ze novy proces se udela jen na zacatku. Pak se stejne ceka. A v jakych poctech se vlastne pohybujeme? Myslim, ze v takovych, kde vytvoreni child procesu opravdu nebude problem s rezii. ;-)
    16.3.2022 15:11 kvr
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Efektivnejsi? Mozna ano, ale uvedom si, ze novy proces se udela jen na zacatku. Pak se stejne ceka. A v jakych poctech se vlastne pohybujeme?
    Efektivnější neznamená jen vytvoření procesu, ale celou dobu údržbu těch procesů (vlastní tabulka virtuální paměti - i když z velké části samotná paměť asi sdílená, taky, kdo ty child procesy bude sestřelovat). Pokud se pohybujeme v rámci desítek funkcí - pak je fork ok, stovky, možná nízké tisíce - threads jsou ok, u víc by to chtělo ten threadpool. Počítám, že tady půjde o jednotky až desítky, proto jsem psal, zda to stojí za ty komplikace (respektive komplikace je to, že pro čisté C takové knihovny moc nejsou, jinak by to bylo naopak jednodušší).
    17.3.2022 09:11 Mayhem
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Efektivnější neznamená jen vytvoření procesu, ale celou dobu údržbu těch procesů (vlastní tabulka virtuální paměti - i když z velké části samotná paměť asi sdílená, taky, kdo ty child procesy bude sestřelovat).
    Proc bude vetsinu dobu sveho zivota pouze spinkat, nebal bych se tedy teto rezie.
    Pokud se pohybujeme v rámci desítek funkcí - pak je fork ok, stovky, možná nízké tisíce - threads jsou ok, u víc by to chtělo ten threadpool.
    Jiste, ThreadPool a napsat to treba v jave by bylo nejlepsi, ale to tazatel nechtel. Pro jeho ucel naprosto postacuje model s forkem a signal. A garantuji vam, ze pro tento ucel nejsou i radove stovky na prumernem zeleze problem.
    Počítám, že tady půjde o jednotky až desítky, proto jsem psal, zda to stojí za ty komplikace (respektive komplikace je to, že pro čisté C takové knihovny moc nejsou, jinak by to bylo naopak jednodušší).
    +1

    Take mi prijde, ze pro zacatecnika jsou veci okolo forku a signalu daleko pochopitelnejsi nez prace s pthreads, ktere v C maji vylozene hnusne api.
    21.3.2022 09:47 Zm
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Signály jsou problematické, při jejich použítí se musí kontrolovat všechna sys. volání, zda nedošlo k přerušení signálem.
    22.3.2022 09:53 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Ahoj, postupně si hraji s těmi vlákny a tak mě napadlo, nebylo by snadné řešení pomocí pthread_cond_timedwait? Myslím nahradit jím ten sleep. Mělo by to řešit problém rychlým ukončením a požadovaným čekáním zároveň. Bylo by to řešení?

    Nicméně se mi to nějak nedaří naimplementovat pro více vláken.

    Tady jsem se pokusil o malé demo, "tasky" to periodicky spouští, ale mám tam nějaký problém s ukončením při CTRL+C. Někdy to zůstane viset na nějakém joinu, nevím proč. :(
    Mmain(): sending cancellation request
    Joining thread 0
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 1
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 2
    main(): thread was canceled
    main(): sending cancellation request
    Joining thread 3
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 4
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 5
    _
    
    https://pastebin.com/BmECNELD

    K čemu je tam nutný prosím ten fakeMutex? PS: Zkusil jsem i ně které zde zzmíněné další varianty, ale přišlo mi to až zbytečně složité.
    22.3.2022 13:26 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Tak už jsem na to asi přišel. Pokud program signalizuje ukončení, tak je třeba přerušit to čekání v jednotlivých vláknech na dané podmínce. Takže stačí poslat pthread_cond_broadcast(&fakeCond); a pak pro jistotu ještě počkat na dokončení vláken přes join().
    22.3.2022 22:15 kvr
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Fake mutex je tam proto, že tak funguje condition:

    - Producer by měl zamknout stav, nastavit indikátor a udělat broadcast na podmínku asociovanou s mutex, a odemknout mutex.

    - Consumer zamkne stav, zkontroluje indikátor, rozhodne se co dál. Pouze pokud potřebuje čekat na indikátor, udělá wait na condition, který zároveň dočasně odemkne mutex, aby ho producer mohl přenastavit.

    Pokud by tam ten mutex nebyl, tak přístup k indikátoru bude neizolovaný a může dojít k race condition, když producer pustí broadcast v mezičase kdy consumer kontroluje indikátor a než udělá wait na condition.

    (indikátor může být cokoliv - zde asi exit, ale typicky to bývá prázdná nebo plná fronta apod)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.