公共变量的互斥。。。。。。。。。。。

mandarin 2010-07-16 02:38:07
想实现的功能是这样子的:
程序a.exe的调用b.dll的一个函数,我把a。exe中的一个列表地址作用这个导出函数的参数,这样b.dll就能够使用这个列表对象。

现在a和b中都在操作这个列表,a中有可能删除列表中的某一项,不知道怎么互斥。本来想把TRTLCriticalSection传过去,结果不行。
望高手指点下。。。。
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxieyang 2010-07-16
  • 打赏
  • 举报
回复
可能你欠缺的不是互斥,而是通知机制,也就是说a删除了列表,删除完成之后,需要通知b,让b知道列表被删除了。
如果是这样,在dll中引出一个回调函数就可以了,a删除了列表之后,调用一下回调函数。
如果exe和dll都有窗体,那发消息通知也行
wxieyang 2010-07-16
  • 打赏
  • 举报
回复
你的问题有点奇怪,如果你的程序师单线程的,那么根本就涉及不到同时操作的问题。如果非要说是同时,只能说是exe和dll是乱序操作,也就是说,exe中某个函数操作了列表,完事后dll中某个函数又操作了列表,这种分时是可以通过函数的调用约定来控制操作顺序的。
还有就是:dll和exe中都有窗体,并且窗体的事件响应中都涉及到操作列表,不过这看似同时的操作,其实也是分时的,某个事件响应函数没完事,绝对不会响应另外一个事件的。
如果你的程序是多线程的,那才涉及的同步问题。

在单线程中,像你说的,a在删除列表中的项,在没有完成删除之前,是不会有其他的函数能够操作这个列表的。不论操作列表的函数是在dll中还是exe中
  • 打赏
  • 举报
回复
没看明白跟互斥有什么关系。如果系统级的互斥,用互斥变量不就行了?
僵哥 2010-07-16
  • 打赏
  • 举报
回复
比如把所有对数据的操作抽象出一套操作函数库,然后通过回调函数之类的来操作数据,也就是说只要在你的A或者B一方面有数据,并且对数据进行操作,另一方则是通过调用/回调本方的函数接口来完成数据的操作。
mandarin 2010-07-16
  • 打赏
  • 举报
回复
僵哥我有点理解不了
僵哥 2010-07-16
  • 打赏
  • 举报
回复
使用接口。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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