大雪给解决一下

bm1408 2006-05-12 02:43:20
同步的时候,感到乱七八糟的
#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>

#include<sys/sem.h>

const GP_KEY = 55555;


#define sem_key 6998l
#define SEM_PERM 0600

static struct sembuf LockOp[2]=
{
0,0,0,
0,1,SEM_UNDO
};
static struct sembuf UnlckOp[1]=
{
0,-1,(IPC_NOWAIT|SEM_UNDO)
};

struct student
{
unsigned int nid;
char name[20];
};

struct stu_sys
{
struct student p[3];

}*STU;


int shmid,semid;
void LockSem()
{
if((semid=semget(sem_key,1,SEM_PERM|IPC_CREAT))==-1)
{
perror ("LockSem() Get semaphore error");
}
if(semop(semid,&LockOp[0],2)==-1)
{
perror("LockSem() Lock semaphore error");
}
}
/*解锁信号灯*/
void UnlockSem()
{
if((semid=semget(sem_key,1,SEM_PERM|IPC_CREAT))==-1)
{
perror("UnlkSem() Get semaphore error");
}
if(semop(semid,&UnlckOp[0],1)==-1)
{
perror("UnlkSem() Unlock semaphore error");
}
}
unsigned char *initshm(key_t key ,int size)
{
unsigned char *retval;

if((shmid = shmget(key,size,0666|IPC_CREAT))==-1)
{
printf("shmget failed \n");
exit(-1);
}

if((retval = shmat(shmid,(unsigned char *)0,0)) ==(unsigned char *)-1)
{

printf("shmat failed \n");
exit(-1);
}
return retval;
}

unsigned char *findid(int id )
{

STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));
if( STU->p[0].nid !=0)
{
printf("sorry! shared memory is empty\n");
exit(-1);

}

else
{
for(int i =1;i<3;i++)
if(STU->p[i].nid == id)
return STU->p[i].name;

}
return NULL;
}

int main()
{

STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));

if( STU->p[0].nid ==0)
{
STU->p[0].nid = 0;
strcpy(STU->p[0].name,"nobady");
STU->p[1].nid = 1002;
strcpy(STU->p[1].name,"wang");
STU->p[2].nid = 1005;
strcpy(STU->p[2].name,"zhang");


shmdt(STU);

}
else
{
printf("己读入shared memory \n");

}

pid_t cld;

if( (cld=fork())==0)
{
LockSem();
STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));
unsigned char *p = findid(1002);
printf("\nfind id is 1002 and name is %s\n",p);
shmdt(STU);
sleep(6);
UnlockSem();

}
for(int i =0;i<4;i++)
{
if((cld=fork())==0)
{
LockSem();
STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));
for(int i = 1;i<3;i++)
{
printf("\n%d\n",STU->p[i].nid);
printf("%s\n",STU->p[i].name);
}
shmdt(STU);
printf("\n %d",i);
UnlockSem();
}

}


}
...全文
96 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
x86 2006-05-12
  • 打赏
  • 举报
回复
代码太多, 今天没法给你看了。多打一些调试信息看看吧。
*对Unity 2019.3.0及更高版本的HDRP支持 *修复了Unity 2019.3.8及更高版本中的影子级联错误。 通过随附的软件包支持默认的3D就绪,URP和HDRP。 新! HDRP支持美丽和大气的照明。 新!夏季和冬季主题。 Illustrated Nature是一个完整的3D环境包,是为那些想在一个色彩缤纷的绘画世界中讲述故事的人创建的。 该程序包由一系列程式化的植被模型(树木,灌木,草,岩石,植物),着色器,图像效果和脚本(包含声音和音乐)组合而成,目的是使其变得有用且随时可以使用在任何项目中使用。 您将能够使用颜色管理器工具和随附的着色器轻松更改季节。 着色器带有一键激活雪的选项。调整场景的外观,从寒冷的早晨的微霜到冬季的大雪。 该软件包的一些突出功能包括: 2个演示场景-一个要探索的大环境和另一个较小的松树林。 调色板-包括4种调色板,以及冬季。 彩色雾-自定义雾图像效果,可让您控制雾的颜色并根据需要对其进行样式化。 云-基于粒子系统的云解决方案,具有无限变化。 自定义着色器-动画植被,冬季的雪层,可通过材质控制的地形颜色。 有色水-定制水着色器,可轻松根据您的需要进行样式化。 颜色管理器(脚本)-一种全面的工具,可从一个地方管理材料上的颜色。您可以根据需要创建任意数量的调色板,并可以在它们之间轻松切换。 艺术风格是独特的,其设置方式可让您根据需要进行自定义。有14种带有alpha的白色纹理,压缩为256x256大小。场景中的所有颜色都是通过材质的color属性控制的。 它包含24种独特的模型和40多种预制件: 3 x多叶树-带有LOD的茂密和枯死版本。 3 x松树-具有LOD的绿色和死角版本。 3 x灌木-带有LOD的郁郁葱葱的死胡同。 3 x岩石-经过精心雕刻,无论大小都可以正常工作。 5 x植物-睡莲和花朵,可在郁郁葱葱的平原上增添色彩。 3 x草-使用LOD进行了优化,可以在大面积上使用。 5个空地模型-树枝和树叶可为地面增加细节。 默认3D渲染管道的安装步骤。 为了欣赏美丽的场景并避免脚本警告丢失,您的项目应将颜色空间设置为线性,并安装后处理程序包。 1.将项目色彩空间设置为线性。 2.从程序包管理器中导入后处理程序包。 3.导入Illustrated Nature资产。 每个模型都是耐心和爱心所创造的,像画中的笔触一样和谐地坐在场景中。

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧