免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1250 | 回复: 1
打印 上一主题 下一主题

关于posix信号等的死锁问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-28 21:05 |只看该作者 |倒序浏览
sem_t mutex;
sem_t put;
sem_t get;

sem_init(mutex, 1, 1);
sem_init(put, 1, 100);//有100个可用的资源
sem_init(get, 1, 0);


int produce(){//位于独立的进程中
        sem_wait(&put);
        sem_wait(&mutex);
       
        操作共享资源(操作过程中,程序异常终止,即没有执行下面的sem_post(&mutex)程序就终止了)

        sem_post(&mutex);
        sem_post(&get);
}


int consurne(){//位于独立的进程中
        sem_wait(&get);
        sem_wait(&mutex);
       
        操作共享资源(操作过程中,程序异常终止,即没有执行下面的sem_post(&mutex)程序就终止了)

        sem_post(&mutex);
        sem_post(&put);
}

前提:
        produce()和consurne()分别在不用的进程中;
        信号灯mutex、put、get位于共享内存中,以便各进程之间共享;

问题:       
        如果是在操作共享资源过程中,程序异常终止,因为还没有执行sem_post(&mutex)程序就终止,此时的mutex的值为0;
        因此,其中某个进程再次启动,但由于此时的mutex的值为0,所以发生死锁现象。如何解决这个问题?

[ 本帖最后由 hzx317 于 2006-10-28 21:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-10-29 21:46 |只看该作者
也许稍微变一变再加sigaction能成,不过实用意义不大,要解决的通常是尽量减小操作中出现异常的机率。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP