Ir para conteúdo
Fórum Script Brasil
  • 0

Round-Robin time-slice com POSIX


Juliano Rossi

Pergunta

Olá para todos!

Eu estou tentando alterar o time-slice (quantum) do escalonamento Round-Robin por meio dos padrões POSIX.

Até o momento consegui achar isto:

- sched_rr_get_interval(0, &timeTrigger);

Onde:

- 0 é o processo corrente;

- &timeTrigger é uma referência a um timespec configurado com 2 segundos.

Aqui vai o código:

#include "RoundRobin.h"

#include <pthread.h>

#include <sched.h>

#include <cstdlib>

#include <iostream>

#include <sys/time.h>

#include <unistd.h>

#define NUM_PTHREADS 2

#define MICRO_PER_SECOND 1000000

struct timeval now, start, stop;

struct timespec timeTrigger, timeCondition;

pthread_t myPthreads[NUM_PTHREADS];

pthread_mutex_t myMutex = PTHREAD_MUTEX_INITIALIZER;

pthread_attr_t myAttr;

using namespace std;

void *Work (void *ptr){

int i = (int) ptr;

pthread_mutex_lock(&myMutex);

cout << "\nPrinting PThread" << i << endl;

for(int j=1;j <= 6; j++){

cout << j << " ";

sleep(1);

}

pthread_mutex_unlock(&myMutex);

return NULL;

}

RoundRobin::RoundRobin() {

// TODO Auto-generated constructor stub

}

RoundRobin::~RoundRobin() {

// TODO Auto-generated destructor stub

}

void RoundRobin::CriaPThreads(){

int resultOfCreatePthread=0;

gettimeofday(&now, NULL);

timeTrigger.tv_sec = now.tv_sec + 2;

pthread_cond_init(&myCond, NULL);

pthread_attr_init(&myAttr);

pthread_attr_setschedpolicy(&myAttr, SCHED_RR);

pthread_attr_setinheritsched(&myAttr, PTHREAD_EXPLICIT_SCHED);

sched_rr_get_interval(getpid(), &timeTrigger);

for (int i=1; i <= NUM_PTHREADS; i++){

resultOfCreatePthread = pthread_create(&myPthreads, &myAttr,

Work, (void *)i);

if (resultOfCreatePthread != 0)

cout << "PThread " << i << ": Impossible to create." << endl;

}

}

void RoundRobin::AguardaFinalizacaoPthread(){

for (int i=1; i <= NUM_PTHREADS; i++)

pthread_join(myPthreads, NULL);

pthread_attr_destroy(&myAttr);

pthread_mutex_destroy(&myMutex);

}

Eu gostaria de configurar algumas PThreads e quando a primeira alcançar o time-slice (quantum), a segunda toma a CPU e a primeira vá para o fim da fila.

Sei que isso é exatamente o escalonamento Round-Robin.

Mas eu preciso fazer isso utilizando POSIX.

Obrigado desde já!

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...