在linux的实际开发中,遇见内存非法访问的问题,在程序中扑获以后,不能返回程序出错地方的下一条语句,而且该信号不能忽略, 紧急求助可以忽略该信号的方法或者 找到发生错误的语句的方法
by tanchanghe - 内核/嵌入技术 - 2005-02-25 11:00:10 阅读(1453) 回复(3)
我们知道,多个进程访问同一块数据,可能会引起数据的不一致性,所以我们使用信号量来同步。一般是在访问共享数据前,进行P操作,访问共享数据之后进行V操作。P操作是对资源量进行减1,如果为资源量为0,则进程挂起,等待别的进程释放此类资源,如果不为0,则访问共享资源。V操作是对资源量进行加1,如果资源量大于0,则唤醒正在等待此资源的进程。 OK,我看项目的代码,提供的对共享资源信号量的处理一般是这样: if ( semop(...
我做了N次测试RH linux 9 ,好像POSIX 信号量不能同步进程,好像是针对pthread的,^_^,但pthread 有自己的库函数比POSIX信号量好用很多是不是啊。好像SYSV可以同步进程和mmap 内存。虚心求教各位有IPC经验的高手。 [ 本帖最后由 zhoujianxin 于 2007-3-19 19:40 编辑 ]
比如signal 有31种 它们的用法和如何对它们进行管理 我们现在将的都是关于这样的程序 如 int main(void){ signal(SIGINT ,gestionnaire); while(1){} return 0; }
代码如下: sem_t sem; sem_init(&sem,0,0); ... task1: .... sem_wait(&sem); .... task 2: .... sem_post(&sem); .... 问题:为什么有时候sem_post 后 task1 一直在那里等,根本不回来。task 就是一个线程。望知情者给予帮助。谢谢 ....
[code]
#include
代码如下。
我的疑惑是:为什么父进程不sleep 60秒,而是随着子进程的结束而结束了?难道是处理SIGCHDL信号导致sleep(60)调用提前结束了吗?
[code]
#include
用man sem_init可以看到,但是好像不好用啊 步骤 sem_t sram_sem; sem_init(&sram_sem,0,1); //init successful; 在别处调用sem_wait(&sram_sem)时 怎么总是返回错误. 好像在那儿看到过不支持posix信号灯,只支持system v 信号量
我是先接收数据存入到数据队列,另外的处理线程对数据进行处理 现在出现接收32768个数据包后,创建信号量失败,但这代码在HP Unix下运行是正常的。 32768刚好是2的16次方,一个short值的长度 会是怎么回事?谢谢大牛们!
详谈linux 2_4_x内核信号量机制 jerryhj@yeah.net 信号量作为一种同步机制,在每个成熟的现代操作系统的实现过程中,起着不可替代的作用,对于linux也不例外,在linux 2_4_x下,实现内核信号量机制的代码虽然不长,但由于涉及到多个进程间的相互干扰,并且在linux发展过程中,不断进行优化,所以非常难于理解,在讲解linux源代码的各类文章中,也大都对此语焉不详,本人通过认真阅读,对这部分代码有了...
#include