bonjour à tous,
J'ai besoin de votre aide pour prendre du recul sur la création d'une classe concurrentQueue (CQ).
J'essaye de faire des codes d'exemples pour ma classe. Mon erreur n'est pas sur de la compilation ou linkage mais sur du fonctionnel. Mon instance de CQ n'est pas partagé entre mes différents instances utilisateur de CQ.
Voici ma classe de concurrentQueue :
Je l'utilise de cette façon là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class concurrentQueue { public: concurrentQueue(){}; concurrentQueue(const concurrentQueue& other){ std::lock_guard<std::mutex> lock(other.mut); data_queue = other.data_queue; }; concurrentQueue &operator=(const concurrentQueue &other) = delete; virtual ~concurrentQueue(){}; [....] };
Mon problème est que mes queue dans A et B s’incrémentent indépendamment. Et ma queue dans ma classe useAandB est toujours vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 class Abstraite { public : Abstraite(const concurrentQueue<int>& aQueue) : myQueue(aQueue){}; virtual void execute(int number) = 0; [...] }; class concreteA : public Abstraite { public: concreteA(const concurrentQueue<int>& aQueue) : myQueue(aQueue){}; void execute(int number) { int n = number -1; myQueue.push(n); }; [....] }; class concreteB : public Abstraite { public : concreteB(const concurrentQueue<int>& aQueue) : myQueue(aQueue){}; void execute(int number) { int n = number + 1; myQueue.push(n); } [.....] }; class useAandB { public : useAandB() {}; void run(); [.....] private : concreteA A; concreteB B; concurrentQueue<int> myQueue } useAandB::useAanB { A = concreteA(myQueue); B = concreteB(myQueue); } useAnB::run() { int number{5}; A.execute(number); B.execute(number); while(!myQueue.isEmpty) { int value{0}; bool try = myQueue.try_and_pop(value) if (try) std::cout << value << std:endl; else std::cout << "Pas de valeur" << std:endl; } std::cout << "Fin de lecture" << std::endl; } int main { useAandB test; test.run(); exit 0; }
J'ai l'impression que mon passage par référence est mal fait.
Quel est votre avis ?
Partager