2 votes

Comment instancier plusieurs threads à l'aide d'une même fonction C++

Voici la fonction execute(), utilisée pour certaines instructions :

void execute() {

while (run) { //thread is running

    if (time % 3 == 0) { // execute instructions when clock is 3
        Instruct Instr;
        uint16_t src1 = 0;
        uint16_t src2 = 0;
        int target_cycle = time;
        while (target_cycle > time) {
            std::this_thread::sleep_for(thread_sleep);
        }

        while (hpp_DE_EX.size() != 0) {

            Instr = hpp_DE_EX.front();

            hpp_DE_EX.pop();

            uint16_t instr = Instr.header;

            ptrLog->PrintData(get, instr);

            src2 = instr & 0x1F;

            src1 = (instr >> 0x5) & 0x1F;

            uint16_t opcode = (instr >> 0xA) & 0x3F;   

            ....

      }

 //For running this thread:
 auto exThread = std::thread(&processor::execute, this);
 exThread.detach();

En utilisant cette fonction execute(), je veux créer plusieurs instances de threads. Je pense que c'est une possibilité de déclarer les threads (mais lorsque j'écris ce code, je reçois des erreurs - INVOKE ERROR C2672) --- MODIFIÉ et maintenant fonctionnel

    std::vector<std::thread> threads;
    for (int i = 0; i <= 5; i++) // need 5 instances
    threads.push_back(thread(&processor::execute, this));

    cout << "Synchronizing all threads...\n";
    for (auto& th : threads) th.join();   // Running code  

Mon intention est d'utiliser la fonction execute() (threads) pour exécuter des instructions parallèles au lieu d'instructions linéaires - paramètre fonctionnel.

Merci, F.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X