Creating a thread VS Forking a thread

来源:互联网 发布:苹果移动数据怎么快捷 编辑:程序博客网 时间:2024/05/01 05:27

   Thread *t;
char id[2], *name = "t";
int i, NumThreads = 4;
for(i=0;i<NumThreads;i++) {
    sprintf(id,i);
    strcat(name,id);
    t = new Thread(name);
}
•creates 4 threads using the constructor function for the class Thread
•The constructor function simply allocates space for thread and sets its status to JUST_CREATED

•in Nachos, a "main" thread is created as part of system initialization
•the ready list remains empty upon creation of these threads.
•the global variable currentThread always points to the thread currently occupying the CPU
 fork:
Thread *t;
char id[2], *name = "t";
int i, NumThreads = 4;
for(i=0;i<NumThreads;i++) {
    sprintf(id,i);
    strcat(name,id);
    t = new Thread(name);
    t->Fork("somefunction",0);
}
•Fork() allocates a stack for the thread which invokes it, and adds it to the ready list maintained by the scheduler
•StackAllocate() allocates and initializes the execution stack for the thread.
•A C routine ThreadRoot() is called which calls the function "somefunction" and upon its return, calls ThreadFinish().
•now, we have all four threads in the ready list with their status set to READY. currentThread still points to "main".