aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/threads/simplethreadtest.c
blob: f9c058e242d51bcae3b6bcc1f2a47809f1e753ac (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// threadtest.cc 
//	Simple test case for the threads assignment.
//
//	Create two threads, and have them context switch
//	back and forth between themselves by calling Thread::Yield, 
//	to illustratethe inner workings of the thread system.
//
// Copyright (c) 1992-1993 The Regents of the University of California.
// All rights reserved.  See copyright.h for copyright notice and limitation 
// of liability and disclaimer of warranty provisions.
//
// Modified by Viacheslav Izosimov
//   - transition from C++ to C (from Nachos to Pintos)


//#include "copyright.h"
//#include "system.h"
#include "threads/boundedbuffer.h"
#include "threads/malloc.h"
#include "threads/synch.h"
#include "threads/thread.h"
#include "tests/threads/tests.h"
#include <stdio.h>
#include <string.h>

//----------------------------------------------------------------------
// SimpleThread
// 	Loop 5 times, yielding the CPU to another ready thread 
//	each iteration.
//
//	"which" is simply a number identifying the thread, for debugging
//	purposes.
//----------------------------------------------------------------------

void SimpleThread(void *);

void
SimpleThread(void * which)
{
    int num;
    
    for (num = 0; num < 5; num++) {
		printf("*** thread %d looped %d times\n", (int)which, num);
		thread_yield();
//        currentThread->Yield();
    }
}

//----------------------------------------------------------------------
// ThreadTest
// 	Set up a ping-pong between two threads, by forking a thread 
//	to call SimpleThread, and then calling SimpleThread ourselves.
//----------------------------------------------------------------------

void
SimpleThreadTest(void)
{
//    DEBUG('t', "Entering SimpleTest");

//    Thread *t = new Thread("forked thread");
	char *t_name = "forked thread";
	printf("Entering SimpleTest");

	thread_create(t_name, PRI_MIN, SimpleThread, (void *)1);

//    t->Fork(SimpleThread, 1);
    SimpleThread((void *)0);
}