Ir ao conteúdo
  • Cadastre-se

André Desessards Jardim

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá. Estou começando a estudar mutexes em C++. Fiz um programa que inclui elementos em uma lista simplesmente encadeada, ordena e mostra o tempo que levou esta ordenação. Gostaria de usar múltiplos threads para fazer essa ordenação (podendo escolher quantos, na linha std::thread threads[10];), e variando o número de elementos que a lista possui, a fim de comparar os tempos de execução, com diferentes elementos/diferentes threads. Fiz isto no main. Estou fazendo certo? Não vejo quase nenhuma diferença entre os tempos, nos testes. Segue abaixo o código. Desde já agradeço pela ajuda e atenção. /* * Programa C++ para Ordenar Lista Simplesmente Encadeada */ #include <iostream> #include <cstdio> #include <cstdlib> #include <chrono> #include <thread> #include <mutex> #define MAX 1000 //número de elementos da lista std::mutex mtx; // mutex para seção crítica using namespace std; /* * Declaração do Nodo */ struct nodo { int info; struct nodo *proximo; }*inicio; /* * Declaração das Classes */ class lista_simples { public: nodo* cria_nodo(int); void insere_inicio(); void ordena(); void exibe(); lista_dupla() { inicio = NULL; } }; /* * Main :contém Menu de Opções */ main() { int opcao, nodes, elemento, posicao, i; lista_simples ls; inicio = NULL; std::thread threads[10]; //número de threads utilizados std::chrono::time_point<std::chrono::system_clock> inicio, fim; std::chrono::duration<double> tempoDecorrido; while (1) { cout << endl <<"---------------------------------------" << endl; cout << endl << "Ordenacao Lista Simplesmente Encadeada" << endl; cout << endl << "--------------------------------------" << endl; cout << "1. Inserir nodos no Inicio" << endl; cout << "2. Ordena Lista Encadeada" << endl; cout << "3. Sair " << endl; cout << "\nEntre com a opcao : "; cin >> opcao; switch(opcao) { case 1: cout << "\nInserindo nodos no Inicio " << endl; ls.insere_inicio(); //ls.exibe(); cout << endl; break; case 2: cout << "\nOrdena Lista Encadeada: " << endl; inicio = std::chrono::system_clock::now(); mtx.lock(); ls.ordena(); //ls.exibe(); mtx.unlock(); fim = std::chrono::system_clock::now(); tempoDecorrido = fim - inicio; cout << "\n\n\nCalculado em: " << tempoDecorrido.count() << "s" << endl; cout << endl; break; case 3: cout << "Sair" << endl; exit(1); break; default: cout << "Opcao Errada" << endl; } } } /* * Cria nodo - Cria Lista Simplesmente Encadeada */ nodo *lista_simples::cria_nodo(int valor) { struct nodo *temp, *s; temp = new(struct nodo); if (temp == NULL) { cout << "Memoria nao Alocada" << endl; return 0; } else { temp->info = valor; temp->proximo = NULL; return temp; } } /* * Insere elementos no início */ void lista_simples::insere_inicio() { int i,valor; struct nodo *temp, *p; for (i=1; i <=MAX; i++) { temp = cria_nodo(valor); valor = rand() % (MAX * 10); if (inicio == NULL) { inicio = temp; inicio->proximo = NULL; } else { p = inicio; inicio = temp; inicio->proximo = p; } } cout << "\nElementos inserido no Inicio" << endl; } /* * Ordena Lista Simplesmente Encadeada */ void lista_simples::ordena() { struct nodo *ptr, *s; int valor; if (inicio == NULL) { cout << "A Lista esta vazia!"<<endl; return; } ptr = inicio; while (ptr != NULL) { for (s = ptr->proximo;s !=NULL;s = s->proximo) { if (ptr->info > s->info) { valor = ptr->info; ptr->info = s->info; s->info = valor; } } ptr = ptr->proximo; } } /* * Exibe elementos da Lista */ void lista_simples::exibe() { struct nodo *temp; if (inicio == NULL) { cout << "A Lista esta vazia!" << endl; return; } temp = inicio; cout << "\nElementos da Lista: " << endl; while (temp != NULL) { cout << temp->info << " "; temp = temp->proximo; } cout << "NULL" << endl; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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...