免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: zhoulongfei

信号灯建立后,锁定它没有反应,直到我将informix关闭后才执行 [复制链接]

论坛徽章:
0
发表于 2003-01-19 19:09 |显示全部楼层

信号灯建立后,锁定它没有反应,直到我将informix关闭后才执行

另外flw 给 的代码应该好好看看
guai_bear 该用户已被删除
发表于 2003-01-19 19:14 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2003-01-20 10:43 |显示全部楼层

信号灯建立后,锁定它没有反应,直到我将informix关闭后才执行

关于信号灯的辕马如下:望各位给我看看:
//锁定信号灯
void P(int sem_set_id)
{
        struct sembuf sem_op;

        //等待信号灯, 直到它的数值非负数
        sem_op.sem_num = 0;
        sem_op.sem_op = -1;
        sem_op.sem_flg = 0;
        semop(sem_set_id, &sem_op, 1);
    printf("锁定信号灯";
}//end of P()

//信号灯解锁
void V(int sem_set_id)
{
        struct sembuf sem_op;

        //增加信号灯的数值
        sem_op.sem_num = 0;
        sem_op.sem_op = 1;
        sem_op.sem_flg = 0;
        semop(sem_set_id, &sem_op, 1);
    printf("解锁信号灯";
}//end of V()


int Init()
{
        int sem_set_id;            //信号灯的ID
        struct shmid_ds *ps;
        int flag = 0; // 0 --- 新建共享内存 1 --表示共享内存已存在

        union sem {
                   struct shmid_ds *ps;
                   int val;
        }sem_val;
        int rc;

        //建立信号灯
        sem_set_id = semget(SEM_ID, 1, IPC_CREAT | 0660);
        if (sem_set_id == -1) {
                perror("main: semget";
                exit(1);
        }

        //设置信号灯的数值是 1
        sem_val.val = 1;
        rc = semctl(sem_set_id, 0, SETVAL, sem_val);
        if (rc == -1) {
                perror("main: semctl";
                exit(1);
        }

        //建立field共享内存
        pScreDoc->;iShmFieldId = shmget(SHM_FIELD_ID, SHARE_FIELD_MEMORY_LEN, IPC_CREAT | IPC_EXCL | 0660);
        if (pScreDoc->;iShmFieldId == -1)
        {
                pScreDoc->;iShmFieldId = shmget(SHM_FIELD_ID, SHARE_FIELD_MEMORY_LEN, IPC_CREAT |  0660);
                    if(pScreDoc->;iShmFieldId == -1)
                    {
                        perror(" Field shmget: ";
                        exit(1);
                     };
                flag = 1;
        }//end of if
        //attach 共享内存
        pScreDoc->;shmField = (char *)shmat(pScreDoc->;iShmFieldId, NULL, 0);
        if (!pScreDoc->;shmField) {
                perror("main: shmat: ";
                exit(1);
        }//end of if
        if(1)//!flag)
        {
             printf("attach 共享内存";
               P(pScreDoc->;iShmFieldId);
                        memset(pScreDoc->;shmField,0,SHARE_FIELD_MEMORY_LEN);
                          LoadFieldLib("/usr/wuliu/screen/data/field.xml";
                       V(pScreDoc->;iShmFieldId);
        }//end of if
        flag = 0;

论坛徽章:
0
发表于 2003-01-20 10:46 |显示全部楼层

信号灯建立后,锁定它没有反应,直到我将informix关闭后才执行

我已经尝试将系统的SEMMAP,SEMMNS SEMMNI SEMMNU SEMMSL 都放大了,还是没有效果,请告诉我应该放大哪个,放大到多少?

论坛徽章:
0
发表于 2003-01-20 11:20 |显示全部楼层

信号灯建立后,锁定它没有反应,直到我将informix关闭后才执行

我怀疑我的问题就是系统SEM参数有问题,但是我放大了也没有用,都已经放大到系统认可的最大值好几倍了

论坛徽章:
0
发表于 2003-01-20 11:33 |显示全部楼层

信号灯建立后,锁定它没有反应,直到我将informix关闭后才执行

我顶

论坛徽章:
0
发表于 2003-01-20 18:36 |显示全部楼层

信号灯建立后,锁定它没有反应,直到我将informix关闭后才执行

各位高手帮帮忙,看看我的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP