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í
×
    dnes 13:11 | IT novinky

    Evropská komise schválila český plán na poskytnutí státní pomoci v objemu 450 milionů eur (téměř 11 miliard Kč) na rozšíření výroby amerického producenta polovodičů onsemi v Rožnově pod Radhoštěm. Komise o tom informovala v dnešní tiskové zprávě. Společnost onsemi by podle ní do nového závodu v Rožnově pod Radhoštěm měla investovat 1,64 miliardy eur (téměř 40 miliard Kč).

    Ladislav Hagara | Komentářů: 0
    dnes 06:11 | Komunita

    Microsoft v příspěvku na svém blogu věnovaném open source oznámil, že textové adventury Zork I, Zork II a Zork III (Wikipedie) jsou oficiálně open source pod licencí MIT.

    Ladislav Hagara | Komentářů: 0
    dnes 05:55 | Komunita

    První prosincový týden proběhne SUSE Hack Week 25. Zaměstnanci SUSE mohou věnovat svůj pracovní čas libovolným open source projektům, například přidání AI agenta do Bugzilly, implementaci SSH v programovacím jazyce Zig nebo portaci klasických her na Linux. Připojit se může kdokoli.

    Ladislav Hagara | Komentářů: 2
    včera 22:00 | IT novinky

    Google oznámil, že Quick Share na Androidu funguje s AirDropem na iOS. Zatím na telefonech Pixel 10. Uživatelé tak mohou snadno přenášet soubory z telefonů s Androidem na iPhony a obráceně.

    Ladislav Hagara | Komentářů: 1
    včera 21:22 | Nová verze

    Byla vydána nová verze 8.5 (8.5.0) skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Přináší řadu novinek a vylepšení (URI Extension, Pipe Operator, Clone With, …). Vydána byla také příručka pro přechod z předchozích verzí.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | IT novinky

    Evropská komise zahájila tři vyšetřování týkající se cloudových platforem Amazon Web Services (AWS) a Microsoft Azure. Evropská exekutiva, která plní také funkci unijního antimonopolního orgánu, chce mimo jiné určit, zda jsou americké společnosti Microsoft a Amazon v cloudových službách takzvanými gatekeepery, tedy hráči, kteří významně ovlivňují provoz internetu a musí dle nařízení o digitálních trzích (DMA) na společném trhu

    … více »
    Ladislav Hagara | Komentářů: 4
    včera 12:33 | IT novinky

    Společnost Meta Platforms vyhrála ostře sledovaný spor o akvizici sítě pro sdílení fotografií Instagram a komunikační aplikace WhatsApp. Podle amerického soudu firma jejich převzetím neporušila antimonopolní zákon, protože si tak nemonopolizovala trh sociálních sítí. Žalobu na Metu podala před pěti lety americká Federální obchodní komise (FTC). FTC argumentovala, že Meta, tehdy známá jako Facebook, koupila tyto dvě společnosti v letech 2012 a 2014 proto, aby s nimi nemusela soutěžit.

    Ladislav Hagara | Komentářů: 0
    včera 05:11 | IT novinky

    Home Assistant včera představil svůj nejnovější oficiální hardware: Home Assistant Connect ZBT-2 pro připojení zařízení na sítích Zigbee nebo Thread.

    Ladislav Hagara | Komentářů: 5
    19.11. 19:44 | Nová verze

    Byla vydána verze 9.1 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a informačním videu.

    Ladislav Hagara | Komentářů: 1
    19.11. 17:44 | IT novinky

    Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Nejvýkonnějším superpočítačem zůstává El Capitan od HPE (Cray) s výkonem 1,809 exaFLOPS. Druhý Frontier má výkon 1,353 exaFLOPS. Třetí Aurora má výkon 1,012 exaFLOPS. Nejvýkonnější superpočítač v Evropě JUPITER Booster s výkonem 1,000 exaFLOPS je na čtvrtém místě. Nejvýkonnější český superpočítač C24 klesl na 192. místo. Karolina, GPU partition klesla na 224. místo a Karolina, CPU partition na 450. místo. Další přehledy a statistiky na stránkách projektu.

    Ladislav Hagara | Komentářů: 17
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (46%)
     (19%)
     (18%)
     (23%)
     (15%)
     (23%)
     (15%)
     (17%)
    Celkem 376 hlasů
     Komentářů: 17, poslední 19.11. 21:57
    Rozcestník

    Administrace komentářů

    Jste na stránce určené pro řešení chyb a problémů týkajících se diskusí a komentářů. Můžete zde našim administrátorům reportovat špatně zařazenou či duplicitní diskusi, vulgární či osočující příspěvek a podobně. Děkujeme vám za vaši pomoc, více očí více vidí, společně můžeme udržet vysokou kvalitu AbcLinuxu.cz.

    Příspěvek
    20.6.2009 07:31 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Další překvapivý příklad

    Ještě tu mám dva zdrojáky, ve kterých funkce volaná v odděleném vlákně mění lokální proměnnou jiného vlákna, na které závisí další běh programu.

    Napřed bez synchronizačních primitiv:

    #include <unistd.h>
    #include <stdio.h>
    #include <pthread.h>
    
    static void * setzero( void * param ) {
            *( (int *) param ) = 0;
            return NULL;
    }
    
    int main( void ) {
            int local = 1;
            pthread_t thread;
    
            pthread_create( &thread, NULL, setzero, &local );
            while ( local );
            pthread_join( thread, NULL );
            puts( "The thread has finished." );
            return 0;
    }

    Tohle dopadne zruba takto:

      -O0 -O1+
    GCC skončí zamrzne
    ICC skončí skončí

    Chování GCC je zcela podle předpokladů. Proměnná není není chráněna primitivem a zároveň není volatile, tudíž při zapnutí optimalizace původní záměr samozřejmě selže. Proč ale kód z ICC nezamrzne? Je to absurdní, ale ICC celý while cyklus odstraní!

    Naskýtá se otázka: Že by snad ICC analyzoval vytváření vláken a zjistil, co se může s tou proměnnou stát? Ne, to se neděje. Je snadné to dokázat: Když ve funkci setzero() přiřadíme místo nuly například dvojku, while cyklus bude odstraněn taky. A to je naprosto špatně. Je to bug v kompilátoru, nebo jen v mé hlavě? V assembleru je přesně toto:

            pushl     %eax                                          #14.42
            pushl     $setzero                                      #14.42
            pushl     $0                                            #14.42
            pushl     %edx                                          #14.42
            call      pthread_create                                #14.2
                                    # LOE ebx esi edi
    ..B1.2:                         # Preds ..B1.7
            pushl     $0                                            #16.24
            pushl     32(%esp)                                      #16.24
            call      pthread_join                                  #16.2

    Teď druhý kousek, tentokrát se synchronizačními primitivy.

    #include <unistd.h>
    #include <stdio.h>
    #include <pthread.h>
    
    static pthread_mutex_t mutex;
    static pthread_cond_t cond;
    
    static void * setzero( void * param ) {
            *( (int *) param ) = 0;
            pthread_cond_signal( &cond );
            return NULL;
    }
    
    int main( void ) {
            int local = 1;
            pthread_t thread;
    
            pthread_mutex_init( &mutex, NULL );
            pthread_cond_init( &cond, NULL );
            pthread_create( &thread, NULL, setzero, &local );
    
            pthread_mutex_lock( &mutex );
            while ( local ) pthread_cond_wait( &cond, &mutex );
            pthread_mutex_unlock( &mutex );
    
            pthread_join( thread, NULL );
            puts( "The thread has finished." );
            pthread_cond_destroy( &cond );
            pthread_mutex_destroy( &mutex );
            return 0;
    }
    

    Funkce setzero() vůbec nezamyká mutex, když signalizuje změnu podmínkové proměnné. Nicméně podle manuálové stránky je něco takového povoleno. Vše funguje zcela korektně pro všechny úrovně optimalizace u GCC i ICC. I z pohledu assembleru je vše v pořádku, lokální promměná v cyklu v main() se skutečně vždy načte znovu.

    Tady je fragment assembleru z kompilátoru Intel při -O3, který odpovídá té smyčce v main():

    ..B1.5:                         # Preds ..B1.20 ..B1.19
            movl      4(%esp), %eax                                 #22.10
            testl     %eax, %eax                                    #22.10
            je        ..B1.10       # Prob 10%                      #22.10
                                    # LOE ebx esi edi
    ..B1.7:                         # Preds ..B1.5
            pushl     $mutex.0                                      #22.44
            pushl     $cond.0                                       #22.44
            call      pthread_cond_wait                             #22.18
                                    # LOE ebx esi edi
    ..B1.20:                        # Preds ..B1.7
            addl      $8, %esp                                      #22.18
            jmp       ..B1.5        # Prob 100%                     #22.18
                                    # LOE ebx esi edi
    

    Dokonce ani lokální proměnná tedy nemusí být volatile, když se používá jako podmínková. V případě inlinování pthread_cond_wait() by to dopadlo stejně, protože tato funkce musí za všech okolností obsahovat speciální instrukce a tudíž i blok asm volatile s kouzelným slovem "memory" v seznamu změněných registrů.

    Začínám být čím dál pevněji přesvědčen, že podmínková proměnná nikdy nemusí být volatile a že toto chování překladačů se ani v budoucnu nemůže změnit.

    V tomto formuláři můžete formulovat svou stížnost ohledně příspěvku. Nejprve vyberte typ akce, kterou navrhujete provést s diskusí či příspěvkem. Potom do textového pole napište důvody, proč by měli admini provést vaši žádost, problém nemusí být patrný na první pohled. Odkaz na příspěvek bude přidán automaticky.

    Vaše jméno
    Váš email
    Typ požadavku
    Slovní popis
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.