怎么用信号灯控制对共享内存的读写,大家都来指点一下,解决者另开贴给500分

scgqq 2005-10-12 07:57:31
int ShmmrTlInf(char *ProCod,char *OrgNo,char *TlNo,char *TlName,HXMLTREE lXmlhandle)
{

}

现在的问题是,调用该函数的进程锁死,不能继续往下进行;
上述函数打出的日志上看所有值,包括信号灯id都是对的,应该是加解信号灯锁出问题了,请各位分析指点一下
我的实现目的是,可能会同时起五个或者更多进程的进程去访问这两块共享内存,都有可能发生读写操作,怎么写才能实现?我看书也没理解清楚,再次恳请大家指点,解决后加分给,绝不食言


...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zly1980 2005-10-14
  • 打赏
  • 举报
回复
我觉得应该是对于线程来操作的,首先你必须维护一个队列,每次有调用时就需要保存调用者的线程ID,句丙之类的,总之要能够睡棉和唤醒那个线程序,再加一个变量,每当lock的时候就=true,进入之前先判断是不是true如果是,则将线成加入到队列,并且睡眠掉,在调用unlock后,设成false,再唤醒队列最先进入的线程序,再加入的时候必须判断那线程是否已经在睡眠的队列,就可以解决重复调用造成死锁的问题。但是我没有实现,那位够功力的自己写一个出来。
yyy790601 2005-10-13
  • 打赏
  • 举报
回复
首先我们应该考虑的是,既然调用该函数的进程死锁,说明没有足够资源来申请。因此原因可能是其他使用此资源的进程在使用后未释放。
利用调试信息看看进程是否在申请资源时阻塞,如果是,那么是上述原因的可能性就比较大。
继续关注。
scgqq 2005-10-12
  • 打赏
  • 举报
回复
第一段是获取两块共享内存
scgqq 2005-10-12
  • 打赏
  • 举报
回复
if ((shm_id = shmget(TLKEY , TLSIZE,0)) == -1)
{
LOG(LM_STD,Fmtmsg(" get error"),"-----柜员信息共享内存-----");
}

if ((hshm_id = shmget(HKEY , HSIZE,0)) == -1)
{
LOG(LM_STD,Fmtmsg(" get error"),"-----汇总共享内存-----");
}

Sm = (SumInf *) shmat(hshm_id, (char *) 0, 0);
Tl = (tTlInf *) shmat(shm_id, (char *) 0, 0);
scgqq 2005-10-12
  • 打赏
  • 举报
回复
各位程序怎么贴呀?他总是告诉我不要发表对它有伤害的言论
ShardingSphere:SpringBoot2+MybatisPlus+读写离+表课程目标快速的掌握读写离+表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介ShardingSphere是一套开源的布式数据库中间件解决方案组成的生态圈。它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。 Sharding-JDBCSharding-JDBC是Sharding-Sphere的第一个产品,也是Sharding-Sphere的前身,是当当网开源的一个产品。定位为轻量级的Java框架,在Java的JDBC层提供额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。他们均提供标准化的数据片、读写离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-JDBC可以通过Java,YAML,Spring命名空间和Spring Boot Starter四种方式配置,开发者可根据场景选择适合的配置方式。课程特色 本章节以尽量短的时间,为使用者提供最简单的ShardingSphere的快速入门。课程说明该课程属于系列课程,读写离,库不表,不表,表,读写离+表共5个回合。本课程属于其中一个回合,请各位小哥哥们注意,课程的标题哦~

23,121

社区成员

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

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