Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]singleton?

    ciao.
    Sto creando un interfaccia opengl in qt.
    Ho la necessità di centralizzare il controllo di moltissime opzioni.
    Ho pensato subito al singleton , ma dato che vorrei che l'applicazione fosse scalabile non vorrei utilizzare il singleton dopo una serie di problemi col multithreading segnalatemi da shodan.
    Esiste un buon metodo per evitarlo?
    Ho pero' bisogno di uno stato, in quanto tutte le opzioni dovrebbero essere lette e scritte su un db sqlite e xml.

    1)utilizzare gli accorgimenti necessari al signgleton in ambito multithreading
    2)qualcosa di meglio potrebbe essere passare l'istanza della classe di configurazione a tutte le classi che ne hanno bisogno.anche se complica molto il codice?

    non so chiedo.
    ciao.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Attento che con il multithreading non s'improvvisa. Devi sapere cos'è una race condition, un deadlock, un mutex. Se ti chiedessi perché il Singleton non è thread safe sapresti rispondere? O perché non è thread safe accedere in scrittura a una variabile globale?
    Ormai la programmazione è orientata al multithreading e ti consiglio di documentarti sui concetti base (se non li sai già).

    Detto questo: se la creazione, scrittura, lettura e distruzione dei dati contenuti nel Singleton sono svolti all'interno dello stesso thread (il main o quel che è), non hai problemi. Puoi creare il Singleton e riempirlo di dati in modo thread safe. Ai vari Thread puoi passare il puntatore al Singleton purché nessun Thread acceda in scrittura ai dati (quindi solo lettura) e non tenti di distruggere il Singleton. Quando i vari Thread saranno terminati puoi tranquillamente distruggerlo.
    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
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie Shodan.

    Come documentarmi su questi concetti base?
    Ho visto che c'è un proliferare di varie librerie in c++ per la programmazione multicore, è una buona idea abbracciare una di queste librerie ? Ed è la stessa cosa della programmazione multithread?
    scusa la mia ignoranza(non vorrei dire sfondoni) ma queste librerie si basano sui task e non sui thread, con alcuni pattern gia pronti da implementare riduzione,parallel for sheduler ecc....

    Inoltre , non vorrei andare OT , ma come risponderanno i colossi tipo microsoft con visual c o intel a questo cambiamento?
    qualcosa ho letto , come l'utilizzo dei for e dei while parallelizzati ,ma non credo che ia la soluzione, soprattutto per il c++

    Mi puoi consigliare un libro che conosci?
    perchè ho letto anche su questo forum che la programmazione multithread è difficile.
    Quindi non è una buona idea secondo me usare una di queste librerie alla cieca , senza conoscere le basi.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da giuseppe500
    Come documentarmi su questi concetti base?
    Puoi cominciare a leggere il capitolo dedicato agli zthreads nel thinking in c++ vol.2: l'infarinatura di base è li. Poi se riesci a procurarti:
    Modern Multithreading di Richard h. Craver e Kuo-Chung Tai edito dalla WILEY (credo sia disponibile solo su amazon) dovresti avere un quadro abbastanza completo. Il resto lo puoi trovare cercando Multithreading programming, Concurrency programming o parallel programming su google. Io sono partito da li per leggere articoli, blog e quant'altro.

    Ho visto che c'è un proliferare di varie librerie in c++ per la programmazione multicore, è una buona idea abbracciare una di queste librerie ?
    Solo il tempo può dirlo. OpenMP, PPL, Tbb sono solo alcune tra le librerie più famose e PPL di Microsoft, che richiede VS2010 e minimo XP Sp3, non è portabile. Per come la vedo io l'adozione di una libreria particolare dipende dal grado di portabilità che vuoi avere e dalla sua documentazione. E comunque è una decisione che si prende in fase di progettazione.

    Ed è la stessa cosa della programmazione multithread?
    scusa la mia ignoranza(non vorrei dire sfondoni) ma queste librerie si basano sui task e non sui thread, con alcuni pattern gia pronti da implementare riduzione,parallel for sheduler ecc....
    Tutto alla fine si basa sui thread e i costrutti che citi sono costruiti su di essi. La differenza è solo l'astrazione e qualche eventuale ottimizzazione nella gestione dei thread che svolgono il lavoro.

    Inoltre , non vorrei andare OT , ma come risponderanno i colossi tipo microsoft con visual c o intel a questo cambiamento?
    qualcosa ho letto , come l'utilizzo dei for e dei while parallelizzati ,ma non credo che ia la soluzione, soprattutto per il c++
    Il C++11 ha introdotto il multithreading nella propria libreria e i compilatori si stanno adeguando. In un paio di blog (che non ricordo) ho visto l'implementazione di un parallel_for utilizzando una std::async() (del nuovo standard). Le librerie multicore citate prima sono nate proprio perché il C++03 non aveva idea di cosa fosse il multithreading.
    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.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie mille

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.