一共演示了兩個例子,乙個利用pv操作實現讀者寫者問題,還有乙個是執行緒通訊。
用的編譯器是tc,就是實驗室的,用其他編譯器會報錯。執行一段時間會停止,按任意鍵即可繼續執行。
#include#include#include#define ntcb 10 /* 系統允許執行的最大執行緒數*/
/* 狀態碼常量定義*/
#define finished 0 /* 表示執行緒處於終止態或tcb是空白狀態 */
#define running 1 /* 表示執行緒牌執行態 */
#define ready 2 /* 表示執行緒處於就緒 */
#define blocked 3 /* 表示執行緒處於阻塞態 */
#define clock_num 5 /* 每個執行緒所執行的時鐘數 */
#define ntext 1000 /* 訊息長度 */
#define nbuff 5 /* 空閒緩衝區最大數量 */
#define get_indos 0x34
#define get_crit_err 0x5d06
char far *indos_ptr =0;
char far *crit_err_ptr=0;
int current; /* 當前程序tcb的下標 */
int timecount; /* 時鐘中斷次數 */
typedef structsemaphore;
struct buffer;
struct buffer *freebuf;/* 空閒緩衝區 */
semaphore mutexfb;
semaphore sfb;/*空閒緩衝區的訊號量*/
semaphore full,empty,mutex; /* 用於讀者寫者問題 */
int pro=0;/* 產品數量 */
struct tcbtcb[ntcb];
struct int_regs;
int dobusy(void);
typedef int(far *codeptr)(void);
void interrupt swtch();
void initdos(void);
int dobusy(void);
void interrupt (*old_int8)(void);/*原來的時間中斷程式,需要先宣告*/
void tcbstate();
void mysleep();
void interrupt new_int8()
int isfinished()
void interrupt swtch()
} void block(struct tcb **pptcb)
tmp->next=&tcb[current];
}swtch();
enable();
} void wakeup(struct tcb **pptcb)
void p(semaphore *sem)
enable();
} void v(semaphore *sem)
struct buffer *getbuf(void)
void insert(struct buffer **mq,struct buffer *buff)
} void send(char *receiver,char *a,int size)
struct buffer* remo(struct buffer **mq,int sender)
if(front==*mq)
*mq=(*mq)->next;
else
rear->next=rear->next->next;
return front;
}int receive (char *sender,char *str)
tmp->next=buff;
}v(&sfb);
enable();
}int fun1(void)
} int fun2(void)
}int main()
setvect(8,old_int8);
printf("all threads is finished\n");
getch();
}void tcbstate()
}void initdos(void)
}int dobusy(void)
void mysleep()
執行結果
將fun1,fun2改下就可以了,功能都已經在上面的**實現了,fun1,fun2只是乙個演示。
int fun1(void)
printf("thread1 send meesage over\n");
}int fun2(void)
}
執行結果 作業系統課程設計 基於DOS的多工系統的實現
內容要求 1 用c語言完成執行緒的建立和撤銷,並按先來先服務方式對多個執行緒進行排程。2 將執行緒排程演算法修改為時間輪轉演算法,實現時間片輪轉排程。3 改變時間片的大小,觀察結果的變化。4 假設兩個執行緒共用一軟體資源 如某一變數,或某一資料結構 請用記錄型訊號量來實現對它的互斥訪問。5 假設有兩...
多工作業系統的任務切換
在學習os時,對於多工作業系統的任務切換,一直不能理解 控制權是怎麼麼回到排程程式上的?記得在描述任務切換時,一般都是這麼描述的 在每乙個時鐘滴答,都將檢查當前程序是否是乙個運 行超過100毫秒的使用者程序。如果是,則呼叫排程程式來檢視是否有另乙個使用者程序在等待cpu,我這裡舉個例子 我用 寫了乙...
對多工程式設計的一些實現 基於Python
以下內容如有錯誤請指出 什麼是程序?程序 程式在計算機中的一次執行,程式是靜態的,程序是動態的過程,具有一定的生命週期 程序的狀態 孤兒程序 父程序先於子程序退出,子程序成為了孤兒 殭屍程序 子程序先於父程序退出,但是父程序未處理子程序的退出狀態,子程序成為了殭屍 殭屍程序的3種解決辦法 1.使用o...