📄 threadtest-buffer.cc
字号:
// 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.#include <stdlib.h>#include <string.h>#include "copyright.h"#include "system.h"#include "dllist.h"#include "synch-sleep.h"#include "BoundedBuffer.h"// testnum is set in main.cc#define Maxsize 20int testnum = 1;//DLList *A=new DLList();Lock* lock = new Lock("list lock");Condition* listEmpty = new Condition("list empty cond");BoundedBuffer* buffer = new BoundedBuffer(Maxsize);//----------------------------------------------------------------------// SimpleThread// Loop 5 times, yielding the CPU to another ready thread // each iteration.//// "which" is simply a number identifying the thread, for debugging// purposes.//----------------------------------------------------------------------extern int T,N;voidSimpleThread(int which){ int num,length,i; char read[100],write[100]; num=1; while(1){ i = 0; printf("*** thread %d looped %d times\n", which, num); num++;// lock->Acquire();// driver_insert(A,N,which);// key = rand()%100;// DLLElement *element = new DLLElement(NULL,key); strcpy(write,"woshishui"); length = strlen(write); buffer->Write(write,length); printf("thread %d write %s\n",which,write); buffer->printbuffer();// listEmpty->Signal(lock);// lock->Release(); currentThread->Yield(); while(i<100) read[i++] = '\0';// printf("thread %d begin read!\n",which); buffer->Read(read,9); printf("thread %d read %s\n",which,read); buffer->printbuffer();// lock->Acquire();// driver_print(A);// lock->Release();// lock->Acquire();// while (A->IsEmpty())// listEmpty->Wait(lock);// driver_remove(A,N,which);// lock->Release(); if(num==2) break; }}//----------------------------------------------------------------------// ThreadTest1// Set up a ping-pong between two threads, by forking a thread // to call SimpleThread, and then calling SimpleThread ourselves.//----------------------------------------------------------------------voidThreadTest1(){ int i; DEBUG('t', "Entering ThreadTest1"); for(i=1;i<=T;i++){ Thread *t1 = new Thread("forked thread"); t1->Fork(SimpleThread,i); }}//----------------------------------------------------------------------// ThreadTest// Invoke a test routine.//----------------------------------------------------------------------voidThreadTest(){ switch (testnum) { case 1: ThreadTest1(); break; default: printf("No test specified.\n"); break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -