| Hjem | Hardware | Nettverk | Programmering | Software | Feilsøking | Systems | 
Hardware  
  • Alt-i - ett-skrivere
  • Apple Computers
  • BIOS
  • CD-og DVD -stasjoner
  • CPUer
  • Computer Drivere og bagasje
  • Skjermer
  • Datautstyr
  • Datamaskin Strøm Kilder
  • Computer Skrivere
  • Computer oppgraderinger
  • desktop
  • Elektronisk boklesere
  • Eksterne harddisker
  • Flash-stasjoner
  • Input & Output Devices
  • Kindle
  • Bærbare datamaskiner
  • stormaskiner
  • Mus og tastatur
  • netbooks
  • Network Equipment
  • Nook
  • bærbare datamaskiner
  • Annen Computer Hardware
  • PC Datamaskiner
  • projektorer
  • RAM, kort og hovedkort
  • Skannere
  • servere
  • lydkort
  • tavle-PCer
  • skjermkort
  • arbeidsstasjoner
  • iPad
  • iPhone
  •  
    Datamaskin >> Hardware >> Elektronisk boklesere >> Content
    Skriv en skjermløsning til leserskrivproblemet?
    `` python

    Importer gjenging

    Importer tid

    Class ReaderWriterLock:

    "" "

    En skjermløsning for leserforfatterproblemet.

    Attributter:

    Read_Count (int):Antall lesere som for øyeblikket får tilgang til ressursen.

    writ_count (int):Antall forfattere som for øyeblikket får tilgang til ressursen.

    lesere_waiting (liste):Liste over lesere som venter på å få tilgang til ressursen.

    Forfattere_waiting (liste):Liste over forfattere som venter på å få tilgang til ressursen.

    Lås (Threading.Lock):En lås for å beskytte den kritiske delen.

    "" "

    def __init __ (selv):

    self.read_count =0

    self.write_count =0

    self.readers_waiting =[]

    self.writers_waiting =[]

    self.lock =threading.lock ()

    def anskaffelse_read (self):

    "" "

    Skaffer seg en leselås.

    "" "

    med selv.lå:

    mens self.write_count> 0 eller self.writers_waiting:

    self.readers_waiting.append (threading.current_thread ())

    self.lock.release ()

    threading.current_thread (). Vent ()

    self.lock.acquire ()

    self.read_count +=1

    def release_read (self):

    "" "

    Slipper en leselås.

    "" "

    med selv.lå:

    self.read_count -=1

    Hvis self.read_count ==0 og self.writers_waiting:

    skribent =self.writers_waiting.pop (0)

    forfatter.Notify ()

    def anskaffelse_write (selv):

    "" "

    Skaffer seg en skrivelås.

    "" "

    med selv.lå:

    mens self.read_count> 0 eller self.write_count> 0 eller self.writers_waiting:

    self.writers_waiting.append (threading.current_thread ())

    self.lock.release ()

    threading.current_thread (). Vent ()

    self.lock.acquire ()

    self.write_count +=1

    def release_write (self):

    "" "

    Slipper en skrivelås.

    "" "

    med selv.lå:

    self.write_count -=1

    Hvis self.readers_waiting:

    leser =self.readers_waiting.pop (0)

    leser.notify ()

    Klasseleser (Threading.Thread):

    "" "

    En lesertråd.

    "" "

    def __init __ (selv, lås):

    Super () .__ init __ ()

    self.lock =lås

    def run (selv):

    for _ i rekkevidde (5):

    self.lock.acquire_read ()

    print (f "Reader {self.name} er lesing")

    TID.SLEPP (0,5)

    self.lock.release_read ()

    print (f "Reader {self.name} ferdig lesing")

    Klasseforfatter (Threading.Thread):

    "" "

    En forfattertråd.

    "" "

    def __init __ (selv, lås):

    Super () .__ init __ ()

    self.lock =lås

    def run (selv):

    for _ i rekkevidde (5):

    self.lock.acquire_write ()

    print (f "Writer {self.name} er å skrive")

    TID.SLEPP (1)

    self.lock.release_write ()

    print (f "Writer {self.name} ferdig med å skrive")

    if __name__ =="__main__":

    Lock =ReaderWriterLock ()

    lesere =[leser (lås) for _ i rekkevidde (3)]

    Forfattere =[forfatter (lås) for _ i rekkevidde (2)]

    For leser i leserne:

    leser.start ()

    For skribent i forfattere:

    forfatter.start ()

    For leser i leserne:

    leser.join ()

    For skribent i forfattere:

    forfatter.join ()

    `` `

    Forklaring:

    1. `ReaderWriterLock` Class:

    - `read_count`,` writ_count`:Sporer antall aktive lesere og forfattere.

    - `Readers_Waiting`,` Forfatter_waiting`:lister for å holde tråder som venter på tilgang.

    - `Lås`:En mutex for å beskytte den kritiske delen der tellere og lister er endret.

    2. `AKVIRE_READ`:

    - skaffer seg en leselås:

    - Det sjekker først om noen forfattere for øyeblikket får tilgang til eller venter. I så fall blir leseren lagt til listen `Readers_Waiting` og venter.

    - Når tilstanden er oppfylt, økes leserens `read_count` økt, noe som betyr at inngangen.

    3. `Release_Read`:

    - slipper en leselås:

    - Decrements the `read_count`.

    - Hvis ikke flere lesere er aktive og forfattere venter, varsles den første forfatteren i `Forfattere_waiting`.

    4. `AKVIRE_WRITE`:

    - skaffer seg en skrivelås:

    - Det sjekker først om noen lesere eller forfattere for øyeblikket får tilgang til eller venter. I så fall blir forfatteren lagt til `Forfattere_waiting` og venter.

    - Når tilstanden er oppfylt, økes forfatterens `writ_count` økt, noe som betyr at inngangen.

    5. `Release_Write`:

    - Slipper en skrivelås:

    - Decrements the `writ_count`.

    - Hvis leserne venter, blir den første leseren i `Readers_Waiting` varslet.

    6. `Reader` og` Writer` -klasser:

    - Disse klassene representerer leser- og forfattertråder.

    - De bruker `ACCIRIRE_READ/ACCIRE_WRITE` og` Release_Read/Release_Write` -metodene for å få tilgang til den delte ressursen.

    hvordan det fungerer:

    - Monitoren sikrer eksklusiv tilgang til ressursen for forfattere.

    - Leserne har lov til å lese samtidig, men ingen leser kan lese mens en forfatter skriver.

    - Ventede tråder administreres i køer og varsles når ressursen blir tilgjengelig.

    Merk:

    - Metoden `Melding ()` brukes til å vekke en ventende tråd.

    - Denne koden bruker konseptet med en tilstandsvariabel (underforstått av `vent ()` og `varsle ()` i dette eksemplet) for å håndtere tråd venter og varsel.

    früher :

     Weiter:
      Relatert Artike
    ·Hvordan bruke en digital Concepts 5 -i- 1 kortleser 
    ·Hva er fordelene med elektroniske leseenheter? 
    ·Slik Send en e-bok til en Sony eReader 
    ·Vil bøker overleve datamaskinens alder? 
    ·Hvordan lage en eReader Sleeve 
    ·Hvem er ansvarlig for å digitalisere bøker i massiv s…
    ·Må du kjøpe bøker for iBooks? 
    ·Slik konverterer en Kindle eBok til Sony E - Reader 
    ·Hvordan bruke E - Reader 
    ·Hvordan forhåndsviser du et leseutvalg? 
      Anbefalte artikler
    ·Slik installerer du et Drum i en Savin 9950DP kopimaski…
    ·Hvordan lage en Domain Controller en global katalog 
    ·eReader & iPad Pixel Density 
    ·Hvordan koble Direct3D Device 
    ·Hvorfor har flere Rails i en Power Supply 
    ·Kan røyke skriverpapir skade deg? 
    ·Hva betyr CPUID med hensyn til databehandling? 
    ·Hva er den raskeste datamaskinen for under 2000? 
    ·Hvilke scenarier skildrer et arbeidsgruppenettverk? 
    ·Om trykkfølsomme Tegning Pads 
    Copyright ©  Datamaskin  http://www.datamaskin.biz/