Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [-] Thread e accesso alle variabili

    Ultimamente mi sto dedicando alla programmazione multithread... e mi è venuto un dubbio: ho bisogno dei semafori anche per leggere da una variabile condivisa? cioè, se io ho un solo thread che scrive su una variabile, e vari thread che leggono, devo usare i mutex? o i mutex vanno usati solo quando ho più di un thread che scrive?

    probabilmente è una domanda idiota... ma mi è venuto questo dubbio... io fino ad ora ho usato mutex sempre (sia per leggere che per scrivere)...

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La teoria vuole che ogni accesso ad una variabile condivisa sia atomico, quindi protetto da mutex. Letture multiple e scrittura singola sono un caso particolare che viene gestito da un mutex particolare che più o meno si chiama multi reader single writer (il senso è quello).

    Un mutex simile però non è fornito dalle primitive di sistema e occorre farselo. Se ne hai bisogno ti conviene cercare con google. Tempo fa ne avevo trovato uno che aveva l'aria di funzionare decentemente.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    grazie dell'informazione.... per ora penso userò un normalissimo mutex... (anche perchè ho un solo reader e un solo writer).... ma l'importante è spere che questi mutex "speciali" esistono... =)=)

    grazie ancora...

  4. #4
    Tra parentesi, l'unico caso in cui puoi fare a meno di un mutex è quando l'accesso alla variabile è effettivamente atomico anche senza l'uso di un mutex, come è ad esempio nell'architettura x86 l'accesso a interi a 32 bit. D'altra parte per non saper né leggere né scrivere è sempre bene mettere un mutex, visto che può capitare che la variabile in questione in un tempo successivo venga cambiata ad un altro tipo per cui l'accesso "normale" non è atomico.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Tra l'altro è consigliato dichiarare la variabile condivisa (quando possibile) come volatile per impedire al compilatore di fare ottimizzazioni su di essa.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    (ho sbagliato thread, pardon)
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.