Quindi sto lavorando su un programma C in crescita in un ambiente Linux / POSIX, e mi sono imbattuto in un'area in cui non sono abbastanza sicuro su come procedere.
Fondamentalmente, sto usando un modello di modulo per sviluppare il mio codice da utilizzare con diversi hardware esterni e operazioni di I / O (ad esempio: un modulo file, un modulo videocamera, un modulo seriale, ecc.) Alcune di queste operazioni prenditi un po 'di tempo per completarlo, e dovresti metterlo nella loro stessa discussione per ovvi motivi.
La mia domanda si riduce fondamentalmente a questo: I moduli stessi dovrebbero controllare il threading sulle operazioni interne, o se il codice chiamante "above" ogni modulo implementa il threading sulle stesse funzioni.
Da un lato, posso vedere dal punto di vista della complessità che dover controllare il threading di più moduli da un punto centrale può essere un po 'un casino. Tuttavia, se il modulo implementa il threading su se stesso, perdi il contesto e il controllo dei singoli processi. Un compromesso potrebbe essere l'esposizione degli oggetti thread tramite il file di intestazione dell'interfaccia, ma poi ritengo che potresti tornare al primo passaggio di nuovo.
I moduli sono attualmente progettati come un blocco funzionale astratto di codice, con poca esposizione al di fuori delle variabili di configurazione (quindi sarebbe una generica interfaccia "Camera" con diversi moduli che implementano l'hardware di quella specifica build o revisione). Le operazioni di I / O non sono intensive, ma tendono a richiedere un po 'di tempo per essere completate; quindi una possibilità potrebbe essere usare una variabile bool / enum esposta per indicare lo stato?