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

  • 大小: 69KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-03
  • 語言: 其他
  • 標簽:

資源簡介

開發環境為eclipse+cdt插件, 用消息與共享內存實現信號量的控制 設計內容 要求產生3個進程: 1、兩個進程模擬需要進入臨界區的用戶進程,當需要進入臨界區時,顯示:“進程x請求進入臨界區…”,同時向管理進程提出申請;申請返回,表示進入了臨界區。在臨界區中等待一段隨機時間,并顯示:“進程x正在臨界區…”;當時間結束,顯示:“進程x退出臨界區…”,同時向管理進程提出退出申請;當申請返回,顯示:“進程x已退出臨界區。” 2、一個進程作為原語的管理進程,接受其他進程的臨界區進入請求:如果允許進入,則設置相應變量,然后返回;如果不允許進入,則進入循環等待,直到允許為止; 3、對臨界區的訪

資源截圖

代碼片段和文件信息

/*
?============================================================================
?Name????????:?OSP.c
?Author??????:?
?Version?????:
?Copyright???:?Your?copyright?notice
?Description?:?Hello?World?in?C?Ansi-style
?============================================================================
?*/

#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“ran.h“
#define?MSGKEY?898989

//臨界區
struct?crform
{
?int?sem;?????????//臨界區的信號量值sem
?int?head;????????//臨界區等待隊列的頭,指向的是最先到的進程
?int?tail;??????????//臨界區等待隊列的尾,指向的是進入等待隊列的進程
?int?duilie[20];?????//存放的是等待的進程的信息,以便喚醒
}cr;

//消息隊列:
struct?msgform
{
?long?msgtype;?????//消息的類型,在取消息隊列時用于區分哪些是該取的信息
?int??mtext;????????//信息的內容,在這里是申請|退出進程的信息
};



void?into();
void?out();

int?main(void)?{
/*************************************************************************************************************/
puts(“***********************提示信息***********************\n“);
puts(“在程序運行過程中:\n“);
puts(“-------輸入?0?繼續運行程序\n“);
puts(“-------輸入?1?暫停運行程序\n“);
puts(“-------輸入?2?退出程序\n“);
puts(“*****************************************************\n“);

/************************************************************************************************************/
int?ppid=getpid();
printf(“控制進程ID:%d\n“ppid);

/*************************************************************************************************************/

cr.sem?=?1;?//初始臨界區信號量必須為一,因為只允許一個進程進入臨界區
cr.head=0;?????????//初始時指向等待隊列的第一個單元
cr.tail=0;

//共享內存結構體
struct?ShMe{
int?num;
int?flags;
int?p1;
int?p2;
};

??/*創建共享內存的IPC*/
int?shmid=shmget(IPC_PRIVATE10240666|IPC_CREAT);
if(shmid==-1){
printf(“共享內存區創建錯誤-----\n“);
exit(0);
}


????pid_t?id?=?fork();
????if?(id<0)?{
????????printf(“新進程創建錯誤!!??2秒后自動退出。。。。。\n“);
????????sleep(2);
????????exit(0);
????}else?if?(id==0)?{
???????//?printf(“01?i‘m?in?new?process?my?id?is?%d?\n“?getpid());
????????pid_t?id2?=?fork();
????????if(id2<0){
???????? printf(“新進程創建錯誤!!??2秒后自動退出。。。。。\n“);
???????? ????????sleep(2);
???????? ????????exit(0);
????????}else?if?(id2==0)?{
????//???????printf(“02?i‘m?in?new?process?my?id?is?%d?\n“?getpid());
????????????/*設置進程1,循環訪問臨界區*/
????????????//
????????????//
????????????//
????????????//**************************************************************************************************************************
?????????? struct?msgform?msg;
????????????key_t?hh=ftok(“OSP.c“1);
??????????? int?msgqid=msgget(hh0666|IPC_CREAT);


????????????struct?ShMe?*?addr;
????????????addr=(struct?ShMe*)shmat(shmid00);
????????????if(addr==(struct?ShMe*)-1)
????????????printf(“映射內存錯誤1------\n“);
????????????/*從共享內存讀出數據*/
????????????int?flags=0;
????????????flags=addr->flags;
????????????(*addr).p1=getpid();
???????? printf(“進程1??ID:%d\n“getpid());

????????????while(flags==1||flags==0){
???????????? if(flags==0){
???????????? //******************************

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2011-12-20?13:30??OSP\
?????文件???????31338??2011-12-19?09:38??OSP\.cproject
?????文件????????2378??2011-12-20?13:29??OSP\.project
?????目錄???????????0??2011-12-20?13:24??OSP\Debug\
?????文件???????80030??2011-12-20?13:24??OSP\Debug\OSP
?????文件?????????971??2011-12-20?13:24??OSP\Debug\makefile
?????文件?????????227??2011-12-20?12:41??OSP\Debug\objects.mk
?????文件?????????389??2011-12-20?13:24??OSP\Debug\sources.mk
?????目錄???????????0??2011-12-20?13:24??OSP\Debug\src\
?????文件??????????52??2011-12-20?13:24??OSP\Debug\src\OSP.d
?????文件???????56600??2011-12-20?13:24??OSP\Debug\src\OSP.o
?????文件??????????60??2011-12-01?20:13??OSP\Debug\src\pandv.d
?????文件????????8104??2011-12-01?20:13??OSP\Debug\src\pandv.o
?????文件??????????24??2011-12-20?09:27??OSP\Debug\src\ran.d
?????文件???????21628??2011-12-20?09:27??OSP\Debug\src\ran.o
?????文件?????????714??2011-12-20?13:24??OSP\Debug\src\subdir.mk
?????文件??????????48??2011-12-02?11:08??OSP\Debug\src\tp.d
?????文件???????15288??2011-12-02?11:08??OSP\Debug\src\tp.o
?????目錄???????????0??2011-12-20?12:33??OSP\src\
?????文件???????16198??2011-12-20?13:24??OSP\src\OSP.c
?????文件?????????307??2011-12-01?21:46??OSP\src\ran.c
?????文件?????????134??2011-12-01?21:46??OSP\src\ran.h

評論

共有 條評論

相關資源