Progettazione di un'applicazione con tasking parallelo sicuro

-1

Il titolo potrebbe essere stato un po 'vago ... Sto lavorando a un software progettato per eseguire un compito. Mi piacerebbe che questa attività funzionasse in parallelo, consentendo a più thread asincroni di eseguire la stessa operazione.

Non sono preoccupato per l'ordine di completamento di queste attività, ma sono preoccupato per il numero di attività eseguite in parallelo (utilizzo della CPU). Ho avuto un'esperienza minima con future o il concetto di semafori in generale ...

Ho letto alcune letture e ho trovato opinioni contrastanti su scenari simili. Quindi speravo che qualcuno potesse indicarmi una buona lettura o un esempio per il mio caso d'uso.

    
posta user0000001 27.07.2016 - 16:23
fonte

2 risposte

0

La tua domanda è molto ampia. Ci vorrà troppo tempo per spiegarti tutto, ma qui alcune indicazioni.

Stai cercando modi per fare il multithreading. In C ++ hai diversi modi per avviare operazioni parallele tramite la libreria standard:

  • thread che puoi gestire da solo,
  • e future , che sono in effetti oggetti che raccolgono i risultati da:
    • async , una chiamata di funzione asincrona (spesso implementata internamente tramite un pool di thread)
    • packaged_task

Inoltre, puoi avviare operazioni parallele utilizzando OpenMP se il compilatore lo supporta (i compilatori mainstream fanno).

Ma non appena si hanno diversi thread, è necessario gestire la sincronizzazione tra di essi, per garantire che l'elaborazione rimanga "sicura" (ad esempio, un thread non sta facendo casino di una infrastruttura che è attualmente aggiornata da un altro thread e quindi temporaneamente in uno stato instabile). Di nuovo C ++ offre molte scelte:

  • atomic variabili a cui è possibile accedere da più thread senza temere le razze di dati
  • condition_variable che consente un meccanismo di notifica
  • mutex con il loro lock

Certamente puoi trovare alcuni tutorial online su questi argomenti. Ma ti raccomando caldamente l'eccellente libro di Antony William " C ++ Concorrenza in azione: pratico multithreading " . Fornisce un'introduzione passo passo al multithreading e alle sue sfide, presenta diverse tecniche che è possibile utilizzare (come il blocco con mutex e lock_guard , o strutture di dati prive di lock) con molti esempi ben illustrati.

    
risposta data 27.07.2016 - 23:40
fonte
-2

La tua domanda chiarisce che desideri implementare Multithreading . Spero che tu ne abbia una comprensione prima. Se non guarda questo sito, spiega chiaramente, link

Quando inizi a studiare in profondità ci sono molte funzioni. Come:

  1. Mutex
  2. ID_Thread
  3. Funzioni che richiedono tempo e molto altro

Dai anche un'occhiata a Pool di thread e Cos'è un pool di thread?

    
risposta data 21.09.2016 - 02:53
fonte