Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [c#]Accesso a variabile "conteso" tra più thread...

    Salve,
    sono abbastanza nuovo alla programmazione multithread, quindi se faccio una domanda per molti banale chiedo scusa.
    Il punto è questo: io avrò molti thread in esecuzione simultanea che dovranno leggere e / o scrivere sulla stessa variabile. Se a me non interessa dare una priorità ad un thread piuttosto che ad un altro (l'ordine con cui i thread hanno accesso alla variabile non mi interessa), posso fare a meno dell'uso di semafori et similia? Oppure rischio di andare incontro ad un errore di qualche tipo?

    Grazie a tutti.

    Ciao

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    dipende dall'uso che ne fai della variabile.. puoi incappare in inconsistenza della stessa.. della serie che il 1 thread la legge e fa qualcosa, nel mentre passa il secondo e la legge (= a prima) se il primo la modifica e il secondo pure non hai mai la certezza di cosa veramente ci sia in quella variabile..

    La cosa più semplice è usare l'istruzione LOCK sulla variabile in modo che sia uso esclusivo di un thread alla volta..

  3. #3
    Grazie mille! Non conoscevo l'istruzione lock. Se ho capito bene si usa semplicemente chiamando:

    lock (variabileContesa)
    {
    ...
    }

    Dove tra le graffe va messo il codice da eseguire prima che la variabileContesa venga rilasciata, giusto? Immagino che tra le graffe posso metterci anche codice che legge e scrive sulla variabile contesa, vero?

    Grazie ancora.

    Ciao

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    bè il lock, se non serve solo da semaforo, è il modo migliore di operare sulla variabile contesa.. un altro modo è usare un mutex (il semaforo)

  5. #5
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    qui sono spiegati tutti...anche l'ultimo nato readwritelock.

    qui

  6. #6
    Me li studierò tutti, prima o poi, ma se il lock funziona come ho scritto due messaggi sopra, allora mi accontento di usare quello, che è di facile implementazione.

    Grazie, ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    40
    Ciao a tutti,

    visto che qui si parla di lock...

    http://msdn.microsoft.com/it-it/library/c5kehkcz(VS.80).aspx

    Se un blocco di codice interviene su un oggetto e può essere eseguito da più thread devo gestire la cosa e posso utilizzare il lock, associandogli ad es l'oggetto stesso etc.
    La mia perplessità è il criterio con cui i thread che trovano occupato si appilano e quindi come vengono poi serviti una volta che il blocco si libera.
    E' una coda fifo? la priorità dei thread ha un peso?

  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    tutti in coda per manina.
    appena il lock viene rilasciato, il primo della coda accede alla variabile.

    Attenzione: tutti i thread devono accedere in modo esclusivo tramite lock altrimenti il meccanismo cade, cioè anche se hai bloccato la variabile tramite il lock in un thread, un'altro thread che non utilizza il lock e tenta di accedere alla variabile, riesce a farlo e quindi non viene bloccatto!
    I got the remedy

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    40
    Ok, se più thread accedono bisogna che tutti i loro possibili interventi siano gestiti con il lock.

    Per quanto riguarda la mia perplessità quindi diciamo che con il lock si crea una coda FIFO di thread.

    Grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    59
    la coda non è FIFO come intuitivamente si possa pensare!
    per renderla FIFO bisogna costruire qualche accrocchio intorno

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 © 2025 vBulletin Solutions, Inc. All rights reserved.