Ir ao conteúdo
  • Cadastre-se
aknup

C++ dividir um vetor para duas threads

Posts recomendados

Boa tarde,estou querendo dividir um vetor de 100 posições para duas threads;

gostaria de saber como faço para pegar inicio  que seria 0 e o fim que seria 49,depois o inicio  da thread 2 que seria 50 e o fim que seria 99.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aknup Olá. Eu não estudei ainda sobre programação multithread em C e C++, mas vi alguma coisinha disso em Java e Python 

Só que em Python vou passar apenas uma forma de imprimir os números de 0 a 99 usando 2 threads (com vetor sei não se conseguiria ainda):

import threading


class MyThread(threading.Thread):

    def __init__(self, i, j):
        threading.Thread.__init__(self)
        self.i = i
        self.j = j

    def run(self):
        self.imprimir()

    def imprimir(self):
        with condition:
            for num in range(self.i, self.j):
                print('[%s] %2d' % (self.name, num))


if __name__=='__main__':

    condition = threading.Condition()

    m1 = MyThread(0, 50)
    m1.start()

    m2 = MyThread(50, 100)
    m2.start()

    m1.join()
    m2.join()

    print()
    print('Exiting Main Thread')

É só para dar uma ideia de como fazer em C++  rs...

Boa sorte!

 

obs: Sou vibrado em programação multithread, apesar de não saber muito ainda sobre o assunto (mas entendo a lógica)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aknup Olá. Segue uma forma de fazer isso em Java (sintaxe mais parecida com a do C++) apenas para te dar uma ideia:

 

Classe MyThread:

public class MyTrhead extends Thread {

    private int i;
    private int j;
    private String nome;
    private int my_array[] = new int[100];

    public MyTrhead(String nome, int[] my_array, int i, int j) {
        this.nome = nome;
        this.my_array = my_array;
        this.i = i;
        this.j = j;
    }

    @Override
    public void run() {
        imprimir();
    }

    public synchronized void imprimir() {

        for (int x = i; x < j; x++) {
            System.out.println("[" + nome + "] array[" + x + "] = " + my_array[x]);
        }
    }
}

Classe com o método main:

public class Aplicacao {

    public static void main(String[] args) {

        int my_array[] = new int[100];

        for (int i = 0; i < my_array.length; i++) {
            my_array[i] = i;
        }

        MyTrhead m1 = new MyTrhead("Thread_1", my_array, 0, 50);
        m1.start();

        try {
            m1.join(); // espera a thread 1 terminar sua execução
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        MyTrhead m2 = new MyTrhead("Thread_2", my_array, 50, 100);
        m2.start(); // inicia a thread 2

        try {
            m2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Agora é só se virar para resolver isso em C++ amigo. Não estudei sobre isso ainda em C e C++, como já disse

 

Me empolguei com esse negócio rs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Junte-se à conversa

Você pode postar agora e cadastrar-se depois. Se você tem uma conta, faça o login para postar.

Visitante
Responder

×   Você colou conteúdo com formatação.   Restore formatting

  Só é possível ter até 75 emoticons.

×   O link foi automaticamente convertido para mostrar o conteúdo.   Clique aqui para mostrá-lo como link comum

×   Seu texto anterior foi restaurado.   Limpar o editor

×   You cannot paste images directly. Upload or insert images from URL.






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!