1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include <iostream>
- #include <vector>
- #include "Thread.h"
- using namespace std;
- class Multiplicateur : public Thread
- {
- public:
- Multiplicateur(int x, vector<int> *binaire);
- void run();
- void giveNumber(int nb);
- void inventaire();
- private:
- const int m_x;
- vector<int> *m_binaire;
- };
- Multiplicateur::Multiplicateur(int x, vector<int> *binaire) : m_x(x), m_binaire(binaire)
- {
- createLockMutex("nb");
- unlockMutex("nb");
- }
- void Multiplicateur::run()
- {
- while (1==1) giveNumber(m_x);
- }
- void Multiplicateur::giveNumber(int nb)
- {
- if ( lockMutex("nb") )
- {
- m_binaire->push_back(nb);
- unlockMutex("nb");
- }
- }
- void inventaire(vector<int> *binaire)
- {
- int nb[3];
- nb[0] = nb[1] = nb[2] = 0;
- while (!binaire->empty())
- {
- nb[(*binaire)[binaire->size()-1]]++;
- binaire->pop_back();
- }
- cout << "Il y a eu "<<nb[0]<<"x0 et "<<nb[1]<<"x1 et "<<nb[2]<<"x2."<<endl;
- }
- int main()
- {
- cout << "Test de la classe Thread développée par Nathan Touroux." << endl;
- vector<int>* tableau(0);
- tableau = new vector<int>(0);
- Multiplicateur process1(1, tableau), process2(2, tableau);
- process1.start();
- process2.start();
- for (int i(0); i<10000; i++) process1.giveNumber(0);
- process1.stop();
- process2.stop();
- inventaire(tableau);
- delete tableau;
- return 0;
- }
|