91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡(jiǎn)介

操作系統(tǒng)課程設(shè)計(jì)線程安全型隊(duì)列,利用讀者優(yōu)先機(jī)制實(shí)現(xiàn)互斥。

資源截圖

代碼片段和文件信息

#include?//C語(yǔ)言標(biāo)準(zhǔn)輸入輸出頭文件
#include?//動(dòng)態(tài)存儲(chǔ)分配函數(shù)頭文件
#include?//標(biāo)準(zhǔn)庫(kù)頭文件(malloc()rand()srand()等等)
#include?//包含用于和宏指令的作用聲明與螺紋和過(guò)程一起使用的C標(biāo)頭文件(線程的創(chuàng)建和終結(jié)等等)
#include?//win32頭文件
#include?//日期和時(shí)間頭文件(用于隨機(jī)數(shù))
#include?//定義了通過(guò)控制臺(tái)進(jìn)行數(shù)據(jù)輸入和數(shù)據(jù)輸出的函數(shù)的頭文件(getch())
#include?//函數(shù)定義的頭文件

#define?_insert?1//1標(biāo)識(shí)為插入
#define?_delete?0//0標(biāo)識(shí)為刪除
#define?sum?64//定義線程運(yùn)行總次數(shù)

volatile?int?readcount=0;//初始化讀者數(shù)目
int?thread=0;//初始化當(dāng)前線程總數(shù)
int?thread_find=1;//初始化當(dāng)前查找線程總數(shù)
int?thread_insert=1;//初始化當(dāng)前插入線程總數(shù)
int?thread_delete=1;//初始化當(dāng)前刪除線程總數(shù)
int?yes=0;

HANDLE?RC_Mutex;//控制讀者數(shù)量readcount的互斥訪問(wèn)量
HANDLE?WR_Mutex;//控制讀寫(xiě)互斥,寫(xiě)寫(xiě)互斥的信號(hào)量

typedef?int?QElemType;??//定義元素類型??

//******定義隊(duì)列的結(jié)點(diǎn)結(jié)構(gòu)******//
typedef?struct?QNode{??
????QElemType?data;//定義數(shù)據(jù)?
????struct?QNode?*next;?//定義指針
}QNode*QN;

//******定義隊(duì)列的結(jié)構(gòu)******//
typedef?struct?QType{??
QN?front;//定義隊(duì)頭指針??
QN?rear;//定義隊(duì)尾指針
}QTypeQT;

//******定義線程的結(jié)構(gòu)******//
struct?ThreadInfo?
{
QT?Queue;//定義隊(duì)列
QElemType?e;//定義查找元素
int?sort;??//線程類別
};

//******初始化一個(gè)空的隊(duì)列并創(chuàng)建隊(duì)列******//
void?InitQueue(QT?&Q)
{
//***初始化一個(gè)隊(duì)列***//
Q.front=Q.rear=(QN)malloc(sizeof(QNode));//分配動(dòng)態(tài)存儲(chǔ)空間
????if(!(Q.front))??
exit(1);??
????Q.front->next=0;?//清空隊(duì)頭指針?
printf(“隊(duì)列初始化成功!\n“);
//***創(chuàng)建一個(gè)隊(duì)列***//
int?ilengthnum;?//定義隊(duì)列長(zhǎng)度length,隊(duì)列元素num
????QN?p;//定義結(jié)點(diǎn)p
printf(“請(qǐng)輸入隊(duì)列長(zhǎng)度:“);
scanf(“%d“&length);//設(shè)置隊(duì)列長(zhǎng)度
srand((unsigned)time(NULL));//設(shè)置隨機(jī)數(shù)種子
????for(i=0;i????{??
p=(QN)malloc(sizeof(QNode));?//分配動(dòng)態(tài)存儲(chǔ)空間?
if(!p)
exit(1);? ????
????num=rand()%10000;//隨機(jī)產(chǎn)生隊(duì)列元素??????????
p->data=num;??
p->next=0;??
Q.rear->next=p;??
Q.rear=p;??
?????}??
?????yes=1;??
}

//******在隊(duì)列尾部加入一個(gè)結(jié)點(diǎn)******//
char?EnQueue(QT?&QQElemType?e)
{
if(Q.front==Q.rear)//判斷隊(duì)列是否為空
{
printf(“隊(duì)列為空,無(wú)法進(jìn)行操作!!!“);
return?-1;??//隊(duì)列為空,返回-1
}
QN?p;??
p=(QN)malloc(sizeof(QNode));//申請(qǐng)新結(jié)點(diǎn)??
????if(!p)
exit(1);????
Sleep(200);
e=rand();//隨機(jī)插入元素
p->data=e;??
p->next=0;??
Q.rear->next=p;
Q.rear=p;
printf(“隨機(jī)插入元素%d\n“&e);
return?1;
}

//******刪除隊(duì)列頭部結(jié)點(diǎn)******//
char?DeQueue(QT?&QQElemType?e)
{
QN?p;??
if(Q.front==Q.rear)//判斷隊(duì)列是否為空
{
printf(“隊(duì)列為空,無(wú)法進(jìn)行操作!!!“);
return?-1;??//隊(duì)列為空,返回-1
}
p=Q.front->next;//指向頭結(jié)點(diǎn)??
e=p->data;??
Q.front->next=p->next;?//刪除隊(duì)列頭結(jié)點(diǎn)?
if(Q.rear==p)??
Q.rear=Q.front;??
free(p);?//釋放p的物理內(nèi)存?
return?e;//利用e返回其值
}

//******刪除隊(duì)列中的所有結(jié)點(diǎn)******//
void?Clear(QT?&Q)
{
QN?p=Q.front;//隊(duì)首指針賦給p
while(p!=NULL)
{
Q.front=Q.front->next;
free(p);
p=Q.front;
}//利用循壞,依次刪除隊(duì)列中的每一個(gè)結(jié)點(diǎn),最后使隊(duì)首指針為空
Q.rear=NULL;
printf(“隊(duì)列已經(jīng)清空!\n“);
}

//******查找隊(duì)列中是否有指定的元素,若有,返回能夠訪問(wèn)該結(jié)點(diǎn)的指針;若無(wú),返回NULL。******//
QN?Find(QT?QQElemType?e)
{
QN?p=Q.front->next;??//定義一個(gè)指針p,位于隊(duì)列頭指針的位置
????if(Q.front==Q.rear)
{
printf(“隊(duì)列為空,無(wú)法進(jìn)行操作!!!\n“);
exit(1);
}
else??
{
while(p)
{
e=rand();
if(p->data!=e)
{
p=p->next;//指針p下移
}
else

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????12269??2018-06-15?00:22??QueueThread.cpp

評(píng)論

共有 條評(píng)論

相關(guān)資源