Steve Jobs a superpočítač Cray-1 budou vyobrazeny na pamětních jednodolarových mincích vyražených v příštím roce v rámci série Americká inovace. Série má 57 mincí, tj. 57 inovací. Poslední 4 mince budou vyraženy v roce 2032.
Byl zveřejněn průběžně aktualizovaný program konference OpenAlt 2025 o otevřeném softwaru a datech, IT bezpečnosti, DIY a IoT. Konference proběhne o víkendu 1. a 2. listopadu v prostorách FIT VUT v Brně. Vstup je zdarma.
Senát včera opětovně nepřijal návrh ústavního zákona, který měl do Listiny základních práv a svobod zakotvit právo občanů platit v hotovosti nebo být off-line. Návrh předložila skupina senátorů již v roce 2023. Senát dnes návrh neschválil, ale ani nezamítl. Pokud by ho přijal, dostala by ho k projednání Sněmovna a vyjádřila by se k němu vláda.
V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 13.0 (Mastodon). Forgejo je fork Gitei.
Společnost Eclypsium se na svém blogu rozepsala o bezpečnostním problému počítačů Framework. Jedná se o zranitelnost v UEFI umožňující útočníkům obejít Secure Boot.
Editor kódů Zed (Wikipedie) po macOS a Linuxu s verzí 0.208.4 už běží také ve Windows.
Apple dnes představil 14palcový MacBook Pro, iPad Pro a Apple Vision Pro s novým čipem M5.
Debian pro mobilní zařízení Mobian (Wikipedie) byl vydán ve verzi 13 Trixie. Nová stabilní verze je k dispozici pro PINE64 PinePhone, PinePhone Pro a PineTab, Purism Librem 5, Google Pixel 3a a 3a XL, OnePlus 6 a 6T a Xiaomi Pocophone F1.
Operátor O2 představil tarif Datamanie 1200 GB . Nový tarif přináší 1200 GB dat s neomezenou 5G rychlostí, a také možnost neomezeného volání do všech sítí za 15 Kč na den. Při roční variantě předplatného zákazníci získají po provedení jednorázové platby celou porci dat najednou a mohou je bezstarostně čerpat kdykoli během roku. Do 13. listopadu jej O2 nabízí za zvýhodněných 2 988 Kč. Při průměrné spotřebě tak 100 GB dat vychází na 249 Kč měsíčně.
Byly publikovány informace o útoku na zařízení s Androidem pojmenovaném Pixnapping Attack (CVE-2025-48561). Aplikace může číst citlivá data zobrazovaná jinou aplikací. V demonstračním videu aplikace čte 2FA kódy z Google Authenticatoru.
Execute
ve které se provádí určitá posloupnost, když byl v konstruktoru nastaven parametr threading
na true
provede se fork
a v potomku se spustí vlákno pomocí pthread_create(&threadId, NULL, &runInThread, NULL)
. Funkce runInThread
je deklarována v private
jako static void * runInThread(void * arg)
a definována následovně
void * Execute::runInThread(void * arg) { while(1) { if(!checking) break; cerr << "Tisknu o zivot" << endl; } return 0; }Problém je v testování proměnné
checking
což je privátní proměnná typu bool
. Překladač zahlásíerror: invalid use of member ‘Execute::checking’ in static member function. Nevím jak do vlákna dostat mechanismus když se během vykonávání kódu ve třídě
Execute
změní checking
na false
aby se vyskočilo ze smyčky a ukončilo i vlákno protože nemá smysl testování dále provádět.
runInThread
je static
, tak i proměnná checking
musí být static
(jinak se k ní statická metoda nedostane).
Další možností by asi bylo předávat proměnnou checking
jako parametr vlákna (v ukazatelích se ještě moc nevyznám, něco jako pthread_create(&threadId, NULL, &runInThread, &checking)
) a v metodě runInThread
s ní pracovat přes arg
, ale pak asi vzniká nebezpečí, že objekt obsahující checking
může zaniknout dřív, než vlákno.
Hmm, a co třeba udělat členskou funkci v Execute
? Něco jako metoda void Execute::setChecking(const bool check)
, která by se volala z rodičovského procesu, by nezabralo?
checking
opravdu zastavit smyčku vlákna, proč to rovnou nedat do podmínky toho while
místo toho, aby se to "přes ruku" přerušovalo break
em? void * Execute::runInThread(void * arg) { bool* check = (bool *) arg; while((*check)) { cerr << "Tisknu o zivot" << endl; sleep(1); } cerr << "Jdu si srknout Matecka" << endl; return 0; }A vlákno spouštím takto
pthread_create( &threadId, NULL, &runInThread, &checking);
checking
tak, aby bylo zaručeno, že mi komplikátor nezoptimalizuje přístup k ní tak, že mi vlákno nikdy neskončí? Je volatile
to správné řešení?
To je poměrně častý omyl. Mutex samozřejmě potřebujete zamykat nejen v threadu, který zapisuje, ale i v těch, které čtou. Jinak stejně může ke kolizi dojít. Jediná situace, kdy zamykání není potřeba, je v případě, že se proměnná mění pouze ve vlákně, u kterého máte garantováno, že bude v daném okamžiku jediné, které může k proměnné (jakkoli) přistupovat - např. proto, že ostatní v tu chvíli ještě neexistují.
V tomto případě asi riziko nebude příliš velké, protože se jedná o typ, u něhož čtení i přiřazení obstará jediná instrukce, takže k problémům nejspíš nedojde. Ale stejně je lepší si na takové praktiky moc nezvykat.
In practice, you can assume that `int' is atomic. You can also assume that pointer types are atomic; that is very convenient. Both of these assumptions are true on all of the machines that the GNU C library supports and on all POSIX systems we know of.U složitějších typů by samozřejmě ten mutex potřeba byl, ale tady bych ho považoval za zbytečnou komplikaci.
IMHO ano, protože to je záležitost HW. ASM instrukce je stále tatáž a jedotlivé instrukce jsou na všech mě známých platformách nepřerušitelné.
int
, o kterém už tu byla řeč.
Můžete mě nazvat zbabělcem, ale já bych POSIXové signály a thready nemíchal, dokud by to nebylo nezbytně nutné - každý z těchto fenoménů je dostatečná hrůza sám o sobě.
No jo, ale co s threadem, který sedí v accept()
a klidně by tam seděl ještě dva dny, než by se nějaký klient uráčil navázat spojení? Jedině použít pthread_cancel()
, ale to taky není úplně bez adrenalinu…
POSIXová norma říká: po volánífork()
může proces volat jenom takové funkce, které jsou "async-signal safe", jinak jsou výsledky nedefinované. Apthread_create()
není "async-signal safe", takže se může stát cokoliv a je to úplně v pořádku.
Doufám, že se to týká jen rodiče.
Kdyby po tomto volání počítač vyletěl do povětří, pravděpodobně by to bylo pořád OK.
Z hlediska glibc asi ano, ale výrobci hardware by asi odvolání se na POSIX specifikaci jako výmluva nestačilo… :-)
fork()
a exec()
, to je jiná. Já už se lekl, že bych v potomkovi vzniklém fork()
už nikdy nemohl zavolat pthread_create()
. To by se ti multithreadoví démoni psali dost špatně…
Pokud vlákno čeká v nejakém blokujícím syscallu, který je navíc interruptible, tak se dá usmrcení vlákna vylepšit o to, že mu člověk navíc pošle signál Ha, milovník adrenalinových sportůNahodou, tady o zadny adrenalin nejde - protoze se (pravdepodobne - aspon ja bych to tak udelal) vubec nepouzije signal handler.
status=true
a name=process1
tak se nejprve provede dynamické načtení třídy process1.so
dále pokud je status=true
tak se provede fork. V potomku se vytvoří vlákno, ve kterém se testuje(zmíněná proměnná checking
, což je proměnná té dynamicky načtené třídy) a spustí se metoda execute()
třídy process1
, ta obsahuje většinou spouštění dalších externích příkázů ze shellu.Rodič má za úkol provést okamžitý tisk HTML odpovědi do prohlížeče, která obsahuje odkaz na HTML soubor, který obsahuje aktuální stav provádění a je aktualizován právě smyčkou ve vláknu.sleep(20)
tak rodič neprovede tisk HTML odpovědi dřívě než za hodnotu, která je nastavena v sleep
, tudíž, že potomek jako by neběžel samostatně.
Jinak moc děkuji, za vaše odpovědi a omlouvám se, jestli plácám blbosti a jsem úplně mimo, vím že není dobré to takhle plácat, čas je v tomto případě opravdu neůprosný sleep
z unistd.h
a ne z pthread.h
. Tímpádem sleep uspává celý proces a probouzí ho signálem. Ty ale chceš uspat jen vlákno.
Jen nevím, jak to, že ti to neřve něco o tom, že je metoda s identifikátorem sleep je definovaná dvakrát.
sleep(20)
dávám v metodě execute()
té dynamické třídy abych si ověřil, že zatímco se vykonává (v tomto případě spinká), rodič něco dělá a nespinká taky checking
.
Tiskni
Sdílej: