II肯定有问题。
I.优先级调度
using System;
using System.Threading;
class Test
{
static void Main()
{
PriorityTest priorityTest = new PriorityTest();
ThreadStart startDelegate =
new ThreadStart(priorityTest.ThreadMethod);
Thread threadOne = new Thread(startDelegate);
threadOne.Name = "ThreadOne";
Thread threadTwo = new Thread(startDelegate);
threadTwo.Name = "ThreadTwo";
threadTwo.Priority = ThreadPriority.BelowNormal;
threadOne.Start();
threadTwo.Start();
// Allow counting for 10 seconds.
Thread.Sleep(10000);
priorityTest.LoopSwitch = false;
}
}
class PriorityTest
{
bool loopSwitch;
public PriorityTest()
{
loopSwitch = true;
}
public bool LoopSwitch
{
set{ loopSwitch = value; }
}
public void ThreadMethod()
{
long threadCount = 0;
while(loopSwitch)
{
threadCount++;
}
Console.WriteLine("{0} with {1,11} priority " +
"has a count = {2,13}", Thread.CurrentThread.Name,
Thread.CurrentThread.Priority.ToString(),
threadCount.ToString("N0"));
}
}
II.最先适应算法&最佳适应算法
#include <stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct freelist
{
int address;
int length;
char *status;
struct freelist *next;
}freelist;
freelist *head;
int w=0;
void Initlist()/*初始化空闲区表*/
{
int a[9]={0,5,21,41,55,58,68,98,128},i=0;
char *s[9]={"OS","F","J1","F","J2","F","J3","F"};
freelist *p=NULL,*rear=NULL;
head=(freelist *)malloc(sizeof(freelist));
head->next=NULL;
rear=head;
for (i=0;i<8;i++)
{
p=(freelist *)malloc(sizeof(freelist));
p->address=a[i];
p->length=a[i+1]-a[i];
p->status=s[i];
p->next=NULL;
rear->next=p;
rear=p;
}
}
void sort()/*最佳适应法排序*/
{ freelist *m,*n,*q;
m=head->next;
q=(freelist *)malloc(sizeof(freelist));
while(m->next!=NULL)
{
n=m->next;
while(n->next!=NULL)
{
if((!strcmp(m->status,"F")) &&(!strcmp(n->status,"F")) && (m->length>n->length))
{
q->length=m->length;
q->address=m->address;
m->length=n->length;
m->address=n->address;
n->length=q->length;
n->address=q->address;
}
n=n->next;
}
m=m->next;
}
}
void output()
{
freelist *opt=head->next;
printf("%s%8s%8s/n","address","length","status");
while (opt!=NULL)
{ printf("%d%10d%10s/n",opt->address,opt->length,opt->status);
opt=opt->next;
}
printf("/n");
}
void destory(freelist *des)
{
freelist *t=des->next;
if ((!strcmp(des->status,"F")) &&(!strcmp(t->next->status,"F")))/*上下与空闲区相邻*/
if (des->address+des->length==t->address && t->address+t->length==t->next->address)
{
des->length=des->length+des->next->length+des->next->next->length;
des->next=t->next->next;
free(t);
free(t->next);
}
if (!strcmp(des->status,"F"))/*上与空闲区相邻*/
if((des->address+des->length)==t->address)
{
des->length=des->length+des->next->length;
des->next=t->next;
free(t);
}
if (!strcmp(t->next->status,"F"))/*下与空闲区相邻*/
{if((t->address+t->length)==t->next->address)
{
des->next->status="F";
des->next->length=des->next->length+des->next->next->length;
des->next->next=t->next->next;
free(t->next);
}
}
else des->next->status="F";
}
Fit()/*最先适应法和最佳适应法的实现*/
{ char *t="F";
int i=0;
freelist *cmp=head,*ins=(freelist *)malloc(sizeof(freelist)),*dins=head->next;
output();
ins->length=13;
ins->next=NULL;
printf("Insert J4/n");
getchar();
while(i!=1)
{
while(strcmp(dins->next->status,"F"))
dins=dins->next;
if (dins->next->length>ins->length)
{
ins->address=dins->next->address;
dins->next->address=ins->address+ins->length;
dins->next->length=dins->next->length-ins->length;
ins->status="J4";
ins->next=dins->next;
dins->next=ins;
i=1;
}
else dins=dins->next;
}
if(w==1) sort();
output();
getchar();
while (strcmp(cmp->next->status,"J1"))/*找到j1且回收*/
cmp=cmp->next;
t=cmp->next->status;
destory(cmp);
if (w==1) sort();
output();
printf("%s%s/n",t," is free!");
cmp=head;
while (strcmp(cmp->next->status,"J3"))/*找到j3且回收*/
cmp=cmp->next;
t=cmp->next->status;
destory(cmp);
if (w==1) sort();
output();
printf("%s%s/n",t," is free!");
}
void main()
{
Initlist();
printf("Firstfit!/n");
Fit();
getchar();
w=1;
Initlist();
sort();
printf("Bestfit!/n");
Fit();
getchar();
}