当前位置: 技术问答>linux和unix
怎么用信号灯控制对共享内存的读写,大家都来指点一下,解决者另开贴给500分
来源: 互联网 发布时间:2015-10-23
本文导语: int ShmmrTlInf(char *ProCod,char *OrgNo,char *TlNo,char *TlName,HXMLTREE lXmlhandle) { } 现在的问题是,调用该函数的进程锁死,不能继续往下进行; 上述函数打出的日志上看所有值,包括信号灯id都是对的,应该是加解信号灯锁出问...
int ShmmrTlInf(char *ProCod,char *OrgNo,char *TlNo,char *TlName,HXMLTREE lXmlhandle)
{
}
现在的问题是,调用该函数的进程锁死,不能继续往下进行;
上述函数打出的日志上看所有值,包括信号灯id都是对的,应该是加解信号灯锁出问题了,请各位分析指点一下
我的实现目的是,可能会同时起五个或者更多进程的进程去访问这两块共享内存,都有可能发生读写操作,怎么写才能实现?我看书也没理解清楚,再次恳请大家指点,解决后加分给,绝不食言
{
}
现在的问题是,调用该函数的进程锁死,不能继续往下进行;
上述函数打出的日志上看所有值,包括信号灯id都是对的,应该是加解信号灯锁出问题了,请各位分析指点一下
我的实现目的是,可能会同时起五个或者更多进程的进程去访问这两块共享内存,都有可能发生读写操作,怎么写才能实现?我看书也没理解清楚,再次恳请大家指点,解决后加分给,绝不食言
|
首先我们应该考虑的是,既然调用该函数的进程死锁,说明没有足够资源来申请。因此原因可能是其他使用此资源的进程在使用后未释放。
利用调试信息看看进程是否在申请资源时阻塞,如果是,那么是上述原因的可能性就比较大。
继续关注。
利用调试信息看看进程是否在申请资源时阻塞,如果是,那么是上述原因的可能性就比较大。
继续关注。
|
我觉得应该是对于线程来操作的,首先你必须维护一个队列,每次有调用时就需要保存调用者的线程ID,句丙之类的,总之要能够睡棉和唤醒那个线程序,再加一个变量,每当lock的时候就=true,进入之前先判断是不是true如果是,则将线成加入到队列,并且睡眠掉,在调用unlock后,设成false,再唤醒队列最先进入的线程序,再加入的时候必须判断那线程是否已经在睡眠的队列,就可以解决重复调用造成死锁的问题。但是我没有实现,那位够功力的自己写一个出来。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。