nachos下双向量表的设计(含并发错误)1

                 nachos下双向量表的设计

一. 实验目的

本次实验的目的在于对nachos进行熟悉,并初步体验nachos下的并发程序设计。

二. 实验内容

安装nachos;

用C++实现双向有序链表;

在nachos系统中使用你所写的链表程序并演示一些并发错误

三. 实验运行实例

一. 实验相关步骤

实验需要编写三个相关文件,它们是dllist.h、dllist.cc、dllist-driver.cc,香港虚拟主机,在dllist.h定义了双向链表,即定义了两个类,element和dllist,其具体代码如下:

class element{public:int key;element *prev;element *next;element(int this_key);element();~element();};class dllist{public:dllist();~dllist();dllist(int key);element *head;element *end;void sortedinsert(int key);void sortedremove();void remove(int this_key);void printfN();};

void dllist::sortedremove(){//删除链表中的第一个数据直到没有数据了。element *temp=NULL;element *temp_next=NULL;(head->next!=NULL&&head->next->key!=101)// if(head->next!=NULL){( head->next->next!=NULL){temp=head->next;temp_next=temp->next;printf(,temp->key);//printf(“gg\n”);free(temp);(flag!=6&&flag!=7)head->next=NULL;if(flag==5||flag==6||flag==7){printf();currentThread->Yield();}head->next=temp_next;temp_next->prev=head;}else{temp=head->next;printf(,temp->key);//printf(“ii\n”);free(temp);(flag==5||flag==6){printf();currentThread->Yield();}//printf(“jj\n”);head->next=NULL;}}else if(head->next==NULL)printf();//printf(“ee\n”:);temp=head;// printf(“a”);/* while(temp->next!=NULL){printf(“%d\n”,temp->key);temp=temp->next;}printf(“%d\n”,temp->key);printf(“b”);*/}

dllist.cc中实现了双向链表的相关功能,包括element的构造函数、析构函数以及dllist的构造函数、析构函数和sortedinsert()、printfN()、sortedremove()、remove()等。而在dllist-driver.cc中实现了插入N个元素和删除N个元素,具体实现如下:

voidThreadTest1(){DEBUG(, );{Thread *t = );t->Fork(SimpleThread,i);}

运行时在nachos-3.4/code/threads/下输入./nachos Thread_num Node_num Flag,其中参数分别为线程数,节点数,错误标志,当错误标志位0是代表正常情况。

二.说明

此次实验通过对并发线程的设计对双向链表的操作,更清晰地了解线程间的运行情况。还通过多线程对双向链表操作所产生错误的演示,加强了我们线程工作原理的认识。

此外,多线程对双向链表的操作所产生的错误,主要有如下几种,美国服务器,当错误标志为1 时,会发生如下所述错误:线程0在插入N个元素后被线程1说抢占插入N个元素,然后线程0进行删除N咯元素的操作,而由于插入时时按照大小顺序插的,导致了线程0删除的不是自己插入的N个元素。

当错误标志位2时,有如下错误:线程0插入1个元素后,被线程1抢占,香港服务器,线程1插入一个元素后,又被线程0抢占插入,直至两个线程完成插入过程。由于插入时时按大小排序插入的,故导致,在删除时,两个线程没能正确的删除它们自己插入的元素。

本次实验作为操作系统本学期的第一次实验,由于对nachos环境不是特别熟悉,所以刚上手时有一定难度,但建立双向链表的过程较为基础。

因为冲动会做下让自己无法挽回的事情。

nachos下双向量表的设计(含并发错误)1

相关文章:

你感兴趣的文章:

标签云: