|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Hårdvara
  • Allt-i - ett-skrivare
  • Apple Computers
  • BIOS
  • CD & DVD drives
  • Processorer
  • Computer Drives
  • Bildskärmar
  • Kringutrustning
  • Datorkraft Källor
  • dator Skrivare
  • Computer uppgraderingar
  • Stationära datorer
  • Elektronisk bok läsare
  • Externa hårddiskar
  • Flash Drives
  • Input & Output Devices
  • Kindle
  • Bärbara datorer
  • stordatorer
  • Möss & tangentbord
  • Netbooks
  • Network Equipment
  • Nook
  • bärbara datorer
  • Övrigt Hårdvara
  • PC Computers
  • projektorer
  • RAM , kort och moderkort
  • skannrar
  • Servrar
  • Ljudkort
  • Tablet PC
  • grafikkort
  • arbetsstationer
  • iPad
  • iPhone
  • * Dator Kunskap >> Hårdvara >> Elektronisk bok läsare >> Content

    Implementera ett lås med flera läsare-en-författare som ges jämförelse-och-swap-instruktionsläsare kan inte överträffa väntande författare?

    Denna implementering använder en jämförelse-och-swap (CAS) -instruktion för att hantera ett lås med flera läsare-sångare. Det prioriterar författare och säkerställer att läsarna inte kan svälta författare. Men den använder inte sofistikerade kömekanismer för rättvisa bland läsarna, så vissa läsare kan uppleva längre väntningar än andra.

    Denna kod är konceptuell och måste anpassas till ett specifikt programmeringsspråk och dess atomoperationer. Funktionen "Compar_and_Swap" är en platshållare; Du måste ersätta det med ditt språk motsvarande (t.ex. `std ::atomic_compare_exchange_weak` i C ++).

    `` `C ++

    #include

    // förutsatt att atom heltal är tillgängliga. Byt ut med ditt språk motsvarande.

    // Observera att användning av ett enda atomheltal kan ha prestationskonsekvenser

    // för ett högsammandragssystem. För kod för produktionsnivå, överväga andra

    // datastrukturer för bättre skalning (t.ex. atomköer).

    #include

    klass multipleadersinglewriterlock {

    privat:

    // 0:Unlocked,> 0:Antal läsare, -1:författare som väntar

    std ::atomic lock ={0};

    offentlig:

    void Acquire_read () {

    medan (sant) {

    int current_value =lock.load ();

    if (current_value <0) {// författare väntar, försök igen

    // Ge processorn så att författaren har en chans.

    // En mer sofistikerad implementering kan använda en tillståndsvariabel.

    fortsätta;

    } annars om (jämföra_and_swap (&lås, current_value, current_value + 1)) {

    bryta; // Förvärvat läslås framgångsrikt

    }

    }

    }

    void release_read () {

    låsa--; // MECLESS LÄSARE COUNT. Atomisk minskning är avgörande.

    }

    void Acquire_write () {

    medan (sant) {

    if (jämför_and_swap (&lås, 0, -1)) {// förvärva lås om inga läsare eller författare

    bryta; // Förvärvade framgångsrikt skrivlås

    } annat {

    // Fortsätt försöka tills de är framgångsrika eller signalera väntestatusen

    fortsätta; // spin-wait, inte idealisk för hög stridighet

    // En mer sofistikerad version kan använda en tillståndsvariabel för att förhindra upptagen väntan.

    }

    }

    }

    void release_write () {

    lås =0; // Release Lock

    }

    // Helper Function (Ersätt med ditt språks jämförelse och byte)

    BOOL COMPARE_AND_SWAP (std ::atomic * mål, int förväntat, int önskvärt) {

    returnera mål-> jämför_exchange_weak (förväntat, önskat);

    }

    };

    int main () {

    MultipleadersingleWriterLock M;

    // Exempelanvändning

    m.acquire_read ();

    std ::cout <<"Reader 1 förvärvade lås \ n";

    m.release_read ();

    std ::cout <<"Reader 1 släppt lås \ n";

    m.acquire_write ();

    std ::cout <<"författare förvärvade lås \ n";

    m.release_write ();

    std ::cout <<"författare släppte lås \ n";

    m.acquire_read ();

    m.acquire_read ();

    std ::cout <<"Reader 2 och 3 förvärvade lås \ n";

    m.release_read ();

    m.release_read ();

    std ::cout <<"Reader 2 och 3 släppt lås \ n";

    return 0;

    }

    `` `

    Viktiga överväganden:

    * spinlocks: Metoderna `Acquire_write` och` Acquire_Read 'använder upptagna väntande (spinlocks). Detta är ineffektivt under hög stridighet. För produktionskod, byt ut detta med tillståndsvariabler eller andra synkroniseringsprimitiva för att undvika att slösa CPU -cykler.

    * svält: Medan författare prioriteras, kan läsarna fortfarande uppleva svält om det finns en kontinuerlig ström av författare. Ett mer sofistikerat kösystem kan förbättra rättvisan.

    * atomiska operationer: Låsets korrekthet förlitar sig starkt på atomiciteten i "Comfare_and_Swap" och inkrement/minskningsoperationer. Se till att din valda atomoperation ger nödvändiga garantier.

    * Felhantering: En robust implementering skulle inkludera felhantering (t.ex. kontrollera för returvärden från atomoperationer).

    * skalbarhet: För scenarier med hög sammanfattning, överväga mer avancerade låsmekanismer utformade för bättre skalbarhet.

    Detta förbättrade exempel ger en mer robust, men fortfarande förenklad implementering. För produktionssystem kan du överväga att använda etablerade bibliotek eller ramar som ger väl testade och högt optimerade synkroniseringsprimitiva. Kom ihåg att synkronisering är komplex och kräver noggrant övervägande av potentiella rasförhållanden och prestanda flaskhalsar.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Vilka fyra typer av information är en författare mås…
    ·Är det bättre att köpa böcker om programmering elle…
    ·Vem utvecklade datoretikens tio budord?
    ·Bör det ta 24 timmar att ladda ner en bok i skrymsle?
    ·Goda kunskaper i bokdesign sidlayoutskrivning och grafi…
    ·Vad kan Acrobat Reader användas för?
    ·Vad är en 7 i 1 Digital Media Card Reader
    ·Vilken programvara använder Bibelförlag för att skri…
    ·Kan du lägga e-böcker på din dator?
    ·Vad är litteraturstudie?
    Utvalda artiklarna
    ·Så att ställa in hastigheten CPU-fläkt
    ·Vad är syftet med rena och gröna projekt?
    ·Hur man gör med dator batterier
    ·Hur man byter ett Realtek ljudkort i Windows XP
    ·Felsökning av en NXT
    ·Hur fixar HP 3330 Scanner fel
    ·Utskrift Problem efter installation av en bläckpatron
    ·Betraktas inte som ett jobb som ett operativsystem mås…
    ·De specifikationer för en Asus P4PE Moderkort
    ·Vilka förbättringar skulle vara genom att uppgradera …
    Copyright © Dator Kunskap https://www.dator.xyz