Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática Sistemas Operativos II Ficha de Avaliação Continua – Módulo IV |
|
|||
19 de Dezembro de 2005 |
|
|
||
|
|
|
||
1 – Crie 6 threads em que cada uma das threads deverá imprimir uma posição de um vector de strings. A posição a imprimir deverá ser passada como parâmetro à thread. A thread principal deve esperar que todas as outras threads terminem.
Sugestão: um vector de strings poderá ser definido da seguinte forma: char s [6][20];
2- Altere o escalonamento do Nachos para que siga o seguinte comportamento:
Quando é pedido ao scheduler para obter a próxima thread a executar, esta deve ser obtida aleatoriamente da lista de treads aptas a executar.
Para a resolução assuma que já existe o método “int ContaElementos” na class List (que conta o número de elementos da lista), o método “void *RemoveItemN(int n)” (que remove e devolve o elemento N de uma lista) e a função que obtém um número aleatório entre 1 e N é a função “int sorte(int N)”.
#include <stdlib.h>
int sorte(int n)
{ int j;
srand(getpid());
j=1+(int) ((double)n*rand()/(RAND_MAX+1.0));
return (j);
}
int List::ContaElementos()
{
ListElement *element = first;
Int n=0;
if (IsEmpty())
return 0;
while (element)
{
n++;
element=element->next;
}
return (n);
}
void * List::RemoveItemN(int n)
{
ListElement *element = first;
ListElement *prev_element = NULL;
int x=1;
if (IsEmpty() || (ContaElementos()<n))
return NULL;
while (element)
{
if (x==n) break;
prev_element=element;
element=element->next;
x++;
}
if (element==NULL)
return NULL;
if (prev_element!=NULL)
prev_element->next=element->next;
if (first==element)
first=element->next;
if (last==element)
last=prev_element;
item=element->item;
delete element;
return item;
}