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 05:55 | Komunita

    O víkendu probíhá v Praze na Karlově náměstí 13 konference Installfest 2026. Na programu je celá řada zajímavých přednášek a workshopů. Vstup na konferenci je zcela zdarma, bez nutnosti registrace. Přednášky lze sledovat i online na YouTube.

    Ladislav Hagara | Komentářů: 4
    včera 05:22 | Komunita

    Mozilla a společnost Mila oznámily strategické partnerství za účelem rozvoje open source a suverénní AI. Cílem je ukázat, že open source AI může konkurovat uzavřeným systémům. Obě organizace chtějí posílit technologickou suverenitu a snížit závislost na hrstce velkých technologických firem.

    Ladislav Hagara | Komentářů: 3
    včera 04:00 | Humor

    Adam Rice předvedl, že pomocí DNS lze distribuovat a spustit kompletní hru DOOM. Rozdělil WAD soubory a binárky do téměř 2000 DNS záznamů v Cloudflare zóně (jeden TXT záznam v DNS může nést okolo 2000 znaků textu). Ty pak stáhl PowerShellem, dekomprimoval a spustil přímo v paměti počítače bez nutnosti zápisu na disk, což prakticky dokazuje, že DNS může sloužit jako distribuované úložiště dat a možný kanál pro načítání kódu. Repozitář projektu je na GitHubu.

    NUKE GAZA! 🎆 | Komentářů: 3
    27.3. 13:00 | Komunita

    Dnes a zítra probíhají Arduino Days 2026. Na programu je řada zajímavých přednášek. Sledovat je lze od 17:00 na YouTube. Zúčastnit se lze i lokálních akcí. Dnes v Poličce v městské knihovně a zítra v Praze na Matfyzu.

    Ladislav Hagara | Komentářů: 9
    27.3. 12:11 | Nová verze

    Byla vydána beta verze Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek v poznámkách k vydání. Dle plánu by Ubuntu 26.04 LTS mělo vyjít 23. dubna 2026.

    Ladislav Hagara | Komentářů: 1
    27.3. 02:22 | Komunita Ladislav Hagara | Komentářů: 11
    26.3. 23:22 | Komunita

    Ubuntu plánuje v budoucích verzích nahradit tradiční nástroje pro synchronizaci času (chrony, linuxptp a gpsd) novým, v Rustu napsaným ntpd-rs, který nabídne vyšší bezpečnost a stabilitu.

    Ladislav Hagara | Komentářů: 3
    26.3. 22:33 | Nová verze

    Byla vydána nová verze 7.6 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Správce hesel KeePassXC byl nahrazen správcem hesel GNOME Secrets. Bitcoinová peněženka Electrum byla povýšena na verzi 4.7.0. Tor Browser byl povýšen na verzi 15.0.8. Další novinky v příslušném seznamu.

    Ladislav Hagara | Komentářů: 1
    26.3. 11:33 | Zajímavý článek

    Chris Down v obsáhlém článku „vyvrací mýty o zswap a zram“, vysvětluje, co vlastně dělají a jaké jsou mezi nimi rozdíly. Doporučuje vyhýbat se zram na serveru a bez OOM.

    |🇵🇸 | Komentářů: 1
    26.3. 11:22 | IT novinky

    Porota v Los Angeles shledala firmy Google a Meta odpovědnými v přelomovém soudním sporu, který se týká závislosti na sociálních sítích; firmy musí zaplatit odškodné tři miliony dolarů (63,4 milionu Kč). Společnosti, které s verdiktem nesouhlasí, čelily obvinění, že své sociální sítě a platformy záměrně navrhly tak, aby si na nich děti vypěstovaly závislost. Porota došla k závěru, že technologické společnosti při navrhování a

    … více »
    Ladislav Hagara | Komentářů: 15
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (30%)
     (2%)
     (5%)
     (1%)
     (14%)
     (24%)
    Celkem 1172 hlasů
     Komentářů: 27, poslední 17.3. 19:26
    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
    26.4.2010 18:20 Rogue | skóre: 4
    Rozbalit Rozbalit vše Synchronizace

    Ahoj potřeboval bych od Vás opět poradit, problém se týká synchronizace. Svůj program jsem aplikoval na problematiku 5 filozofů, ale mám pocit, že dochází k deathlock a starvation. Předem Vám děkuji, za odpovědi.

    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <unistd.h>
    #include <time.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <sys/shm.h>
    #include <sys/sem.h>
    #include <sys/ipc.h>

    #include "semun.h"

    #define N 5
    #define LEFT ((philosopherNumb - 1 + N) % N)
    #define RIGHT ((philosopherNumb + 1) % N)
    #define LOCK (N+1)

    int setSemValue(void);
    int delSemaphore(void);
    int waitTime(void);
    int think(void);
    int eat(void);
    int zpracujParametr(char *arg, int pocetArg);
    int downSemaphore(int philosopherNumb);
    int upSemaphore(int philosopherNumb);
    int philosopher(int philosopherNumb);
    void takeForks(int philosopherNumb);
    void putForks(int philosopherNumb);
    void testPhilosopher(int philosopherNumb);


    enum STATE {thinking, hungry, eating};
    char *state;

    int semId;
    int shmId;

    //struct semData
    //{
    // int semId;
    //} SEM_DATA;

    struct shmData
    {
    int count;
    } SHM_DATA;

    int main(int argc, char *argv[])
    {
    struct shmData *sharedData;

    pid_t pid;
    pid_t children[N];


    int i = 0;
    int retCode = 0;
    //int shmId = 0;
    int stepsNumber = 0;
    void *sharedMemory = (void *) 0;
    // Overovani parametru
    if ((stepsNumber = zpracujParametr(argv[1], argc)) == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Inicializace sdilene pameti
    if ((shmId = shmget(IPC_PRIVATE, N + 1, 0666 | IPC_CREAT)) == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Zpristupneni sdilene pameti programu
    if ((sharedMemory = shmat(shmId, (void *) 0, 0)) == (void*) -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Inicializace citace akci
    sharedData = (struct shmData *) sharedMemory;
    sharedData->count=0;
    // Odpojeni sdilene pameti
    if (shmdt(sharedMemory) == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Inicializace semaforu
    if ((semId = semget(IPC_PRIVATE, N + 1, 0666 | IPC_CREAT)) == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Zpristupneni semaforu
    setSemValue();
    // Zpristupneni sdilene pameti programu
    if ((state = shmat(shmId, (void *) 0, 0)) == (void*) -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Vytvoreni podprocesu
    for (; i < N; i++)
    {
    pid = fork();
    switch (pid)
    {
    case -1:
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    break;
    case 0:
    while (stepsNumber != 0)
    {
    setbuf(stdout,NULL);
    philosopher(i);
    stepsNumber--;
    }
    exit(EXIT_SUCCESS);
    break;
    default:
    children[i] = pid;
    break;
    }
    }
    // Ukonceni potomknu;
    for (i = 0; i < N; i++)
    {
    retCode = waitpid(children[i], NULL, 0);
    if (retCode < 0)
    {
    retCode = kill(children[i], SIGTERM);
    if (retCode == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    }
    }
    // Odpojeni sdilene pameti
    if (shmdt(state) == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Uvolneni sdilene pameti
    if (shmctl(shmId, IPC_RMID, 0) == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    // Uvolneni semaforu
    if (delSemaphore() == -1)
    {
    fprintf(stderr, "Failed...\n");
    exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
    }

    int zpracujParametr(char *arg, int pocetArg)
    {
    char *chyba;
    int errCode = 0;
    int cislo = 0;
    errno = 0;
    // V parametru je obsazen nepripustny pocet parametru nebo neni obsazen zadny parametr.
    if ((pocetArg > 2) || (pocetArg == 1))
    {
    return -1;
    }
    cislo = strtol(arg, &chyba, 10);
    errCode = errno;
    // Parametr obsahuje nepripustne hodnoty.
    if (errCode != 0)
    {
    return -1;
    }
    // Parametr obsahuje neciselne znaky.
    if (*chyba != '\0')
    {
    return -1;
    }
    // Parametr obsahuje zapornou hodnotu.
    if (cislo < 0)
    {
    return -1;
    }
    return cislo;
    }

    int waitTime(void)
    {
    int pauseTime = 0;
    int retCode = 0;
    int errCode = 0;
    // Generovani nahodneho cisla v rozmezi O-100.
    srand((unsigned int) time(NULL) + (unsigned int) getpid());
    pauseTime = rand() % 101;
    retCode = usleep(pauseTime);
    errCode = errno;
    // Chybne skonceni funkce.
    if (retCode != 0)
    {
    return -1;
    }
    // Chybne skonceni funkce.
    if (errCode != 0)
    {
    return -1;
    }
    return 0;
    }

    int think(void)
    {
    waitTime();
    return 0;
    }

    int eat(void)
    {
    waitTime();
    return 2;
    }

    int setSemValue(void)
    {
    union semun semUnion;

    semUnion.val = 0;
    int i = 0;
    for (; i < N + 1; i++)
    {
    if (semctl(semId, i, SETVAL, semUnion) == -1)
    {
    return -1;
    }
    }
    return 0;
    }

    int delSemaphore(void)
    {
    union semun semUnion;

    if (semctl(semId, 0, IPC_RMID, semUnion) == -1)
    {
    return -1;
    }
    return 0;
    }

    int downSemaphore(int philosopherNumb)
    {
    struct sembuf sem;

    sem.sem_num = philosopherNumb;
    sem.sem_op = -1;
    sem.sem_flg = 0;
    if (semop(semId, &sem, 1) == -1)
    {
    return -1;
    }
    return 0;
    }

    int upSemaphore(int philosopherNumb)
    {
    struct sembuf sem;

    sem.sem_num = philosopherNumb;
    sem.sem_op = 1;
    sem.sem_flg = 0;
    if (semop(semId, &sem, 1) == -1)
    {
    return -1;
    }
    return 0;
    }

    void takeForks(int philosopherNumb)
    {
    downSemaphore(LOCK);
    state[philosopherNumb] = hungry;
    testPhilosopher(philosopherNumb);
    upSemaphore(LOCK);
    downSemaphore(philosopherNumb);
    }

    void putForks(int philosopherNumb)
    {
    downSemaphore(LOCK);
    state[philosopherNumb] = thinking;
    testPhilosopher(LEFT);
    testPhilosopher(RIGHT);
    upSemaphore(LOCK);
    }

    void testPhilosopher(int philosopherNumb)
    {
    if (state[philosopherNumb] == hungry && state[LEFT] != eating && state[RIGHT] != eating)
    {
    state[philosopherNumb] = eating;
    upSemaphore(philosopherNumb);
    }
    }

    int philosopher(int philosopherNumb)
    {
    state[philosopherNumb] = thinking;
    printf("F(%d) Mysli\n", philosopherNumb);
    think();
    printf("F(%d) Bere vidlicky\n", philosopherNumb);
    takeForks(philosopherNumb);
    printf("F(%d) Ji\n", philosopherNumb);
    eat();
    printf("F(%d) Poklada vidlicky\n", philosopherNumb);
    putForks(philosopherNumb);
    return 0;
    }
    -------------------------semun.h------------------------------------------------------------
    #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
    #else
    union semun
    {
    int val;                    
    struct semid_ds *buf;       
    unsigned short int *array;
    struct seminfo *__buf;      
    };
    #endif 

    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.