C++ Mon code a une structure de données disent par exemple « vecteur de vecor de chaînes que j'ai 2 fils:multithreading et ressources partagées. Copier périodiquement les données de tampon (structure de données) à un fichier en utilisant
Enfilez 1 est en train d'écrire des données sur cette structure de données (tampon dans la RAM).
discussion 2 en cours d'exécution en parallèle qui devrait copier les données de la structure de données par exemple tampon ci-dessus un fichier pour chaque « x » miliseconds.
I Je me demande comment pourrais-je réaliser cela en C++? Il devrait considérer la clé points dans l'énoncé du problème comme:
a) La copie du tampon vers le fichier ne devrait se produire qu'une seule fois en "X" milisecondes.
b) Synchronisation entre les deux threads.
TRAITEMENT DE LA REQUETE AVEC PLUS DE DÉTAILS PAR LE DEMANDER
Je veux construire une bibliothèque (* .lib) & cette bibliothèque expose des API d'où il obtient des données d'entrée à partir EXE ou toute entité qui utilise ma bibliothèque à travers ces API. Dites que les données reçues par ma bibliothèque sont sous la forme d'un vecteur de chaînes.
FillLibraryDataStructure(std::vector<std::string>); // is the API of this library. Any app can call this API & pass a vector of string to this library.
Example app code:
for(int i=100; i<100;i))
{
std::vector<std::string> vec = GetVectorOfString(); // GetVectorOfString from business logic
FillLibraryDataStructure(vec);
}
Code Library havin une ressource partagée:
// Within library I've a 2D vector i.e. vector of vector of strings where all the vector of strings passed by application to this librray are added as a new row in vecofvecofstr.
RESSOURCES PARTAGÉE:
std::vector<std::vector<string>> vecofvecofstr;
FILET 1: est la copie des données qu'il rece ives de l'API à la structure de données, c'est-à-dire le vecteur du vecteur des chaînes.
vecofvecofstr.push_back(vec);
FILET 2: est la copie du contenu de ce vecteur de vecteur de chaîne (qui a été écrit dans le 1er fil) aux fichiers (XML, HTML, etc ..) pour tous les "X" miiliseconds.
quelques points sur thread1: 1) Sujet 1 doivent être en cours d'exécution en continu à savoir que lorsque l'application et appelle l'API les données reçus doivent être mis à la structure de données vecofvecofstr. 2) Après "X" miliseonds de la copie des données dans le tampon, 2ème thread doit commencer à & devrait copier tous les trucs qui ont été jetés dans le tampon jusqu'à ce jour. Encore après "milisonds" le fil 2 doit faire une pause & attendre pour "X" ms.
Comment y parvenir. Ici le 1er thread est celui par défaut dans lequel mon code de bibliothèque serait en cours d'exécution. Comment puis-je y parvenir en utilisant C++?
C'est une question très large et communément appelé le problème des producteurs et consommateurs. – OutOfBound
Il n'est pas clair si le thread 1 peut également lire dans la structure de données. C++ 11 a les mutex nécessaires et 'std :: lock_guard' pour utiliser les mutex facilement. Vous auriez aussi besoin d'une minuterie, ou faites simplement dormir le fil. – Bernard