Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c++]cataloghi

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]cataloghi

    ciao.
    Devo creare un mecchanismo di cataloghi per gestire le risorse della mia applicazione(un piccolo engine 3d).
    Mi serve perchè invece di instanziare un nuovo oggetto e caricarlo uso semplicemente una variabile copia del suo indirizzo e una mappa di smartpointer(uso lo shared pointer di boost)se è gia instanziato e nella mappa.

    Il catalogo è in pratica incentrato su una mappa di smartpointer (shared pointer per la precisione).

    problemi:
    1)le prestazioni sono molto importanti
    2)questi cataloghi devono essere accessibili da molte parti del mio progetto.
    3)Vorrei per questo fare un singleton ,da problemi di prestazioni? oltre ai problemi legati al fatto che è un po incasinato in ambiente multithreading,shodan mi ha messo la pulce nell orecchio e ho cercatoun po fino a trovare l'implementazione di un singleton thread safe su dr.dobs(una rivista di informatica).
    4)Sempre shodan mi aveva parlato di un meccanismo di chaching , cosa intende?

    grazie.
    ciao.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++]cataloghi

    Originariamente inviato da giuseppe500
    3)Vorrei per questo fare un singleton ,da problemi di prestazioni? oltre ai problemi legati al fatto che è un po incasinato in ambiente multithreading,shodan mi ha messo la pulce nell orecchio e ho cercatoun po fino a trovare l'implementazione di un singleton thread safe su dr.dobs(una rivista di informatica).
    Il problema del Singleton in ambito multithreading è descritto in questo documento.
    http://www.erdani.com/publications/D...04_revised.pdf
    Ma se non usì il multithreading non hai grossi problemi.

    4)Sempre shodan mi aveva parlato di un meccanismo di chaching , cosa intende?
    Se non ricordo male avevo detto di preparare tutti i dati necessari prima di usarli, in modo da farli trovare pronti quando servono. Immagino ti riferisci a questo parlando della mappa.
    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.
    Un altra domanda:
    se uso un normale smart pointer(uso lo shared pointer di boost) che punta ai cataloghi risolvo il problema del multithread?
    Basta questo?
    poi, importante: non riesco a visualizzare nella testa cosa accade in un applicazione con i thread , ogni thread è come un istanza di una classe che viene eseguita in parallelo(ovvero è come se avessi molte istanze della classe eseguite insieme)?
    Se è cosi ' , quando creo un thread quali classi vengono istanziate se ho piu' di una classe che partecipa nel thread?
    scusa se sono ignorante, ma voglio capire.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se i tuoi cataloghi sono dei Singleton, la risposta è no.
    Il documento che ti ho linkato mostra come il problema sia a monte di un eventuale shared_ptr e riguarda proprio la creazione del puntatore raw.
    Ci sono vari modi per risolvere la cosa, a iniziare da boost::call_once(), ma il succo del discorso è garantire che il puntatore raw sia allocato una e una sola volta e in ambito multithreading il Singleton non da questa garanzia.

    poi, importante ...
    Immagina di andare in un centro commerciale, con gente che va e viene. C'è un gran caos, ognuno fa quello che gli pare. Alcuni guardano scaffali, altri fanno altro, qualcuno sta fermo, ma alcuni useranno le stesse risorse prima o poi: la stessa cassa, lo stesso scaffale, la stessa porta. Molti useranno la stessa cassa per pagare, ma solo uno può prendere possesso della cassiera, pagare e rilasciare la cassiera: gli altri aspettano.

    Il centro commerciale è il programma, le persone i thread e la cassa è la risorsa condivisa in cui i vari thread dovranno passare.
    Più o meno è quello che succede in un programma multithreading, con la differenza che il programmatore deve coordinare il tutto.
    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
    Se i tuoi cataloghi sono dei Singleton, la risposta è no.
    e se i cataloghi sono classi normali e utilizzo un raw pointer per accedervi?
    In questo caso come il progetto accede alle risorse condivise in ambito multithreading?
    Ci pensa il sistema operativo che gestisce i thread?

    poi,ho visto cercando su google con multithreading o multiprocessor che esistono delle librerie che aiutano a programmare col multithreading tipo Threading Building Blocks, tu le hai mai usate?
    esiste uno standard per queste librerie?Da quello che ho capito leggendo no.
    Ho poi visto che si usano varie tecniche come i semafori e non so da dove partire a leggere ,esiste un buon libro o della documentazione?
    A livello principiante intendo.
    grazie.

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il mio no era riferito solo al Singleton, non a tutto il resto. Se esiste una funzione di creazione dei cataloghi, puoi e devi gestire il puntatore tramite uno shared_ptr.

    In questo caso come il progetto accede alle risorse condivise in ambito multithreading?
    Le risorse condivise di solito sono variabili globali o risorse del sistema (un file ad esempio), l'importante è fare in modo che solo un thread alla volta ci accedam altrimenti si ha una race condition.
    Ci pensa il sistema operativo che gestisce i thread?
    No, ci devi pensare tu.

    Delle TBB ho usato solo la tbbmalloc.dll per avere le funzioni di gestione della memoria e creare un allocatore compatibile con STL. Tuttavia (da quel che so) i thread in TBB stanno dietro le quinte, non si gestiscono direttamente.
    Boost ha la libreria che è stata adottata dal nuovo standard C++ e che prima o poi tutti i compilatori implementeranno.

    Libri e documentazione sparsa ce n'è ma non so se sono a livello principiante.
    http://oreilly.com/catalog/multithre...erpt/ch01.html
    http://docs.sun.com/app/docs/doc/816-5137
    http://en.wikipedia.org/wiki/Thread_...ter_science%29

    Puoi cercare con multithreading programming, race condition, deadlock, mutex; materiale ne salta fuori.
    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.

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.