可并行的动态链接库

ztmsimon 2014-08-22 05:17:48
我现在将多个设备的操作代码都封装到一个DLL中了。我的GUI中有两个线程,两个线程都会用到这个DLL中的代码,这样就必须用锁来防止资源冲突,但是在GUI中加锁后,发现整个软件的运行时间变的比原来长很多,发现就是其中有个函数运行的时间较长,线程1一直要等线程2中的这个函数运行完了释放锁后才开始运行。
我想能否将锁写在DLL中的每个函数中,但是这样,GUI中的线程是否会冲突?我觉得极限情况下是会导致异常的啊?不知道别人都是如何编写可并行的动态链接库的哦?~
...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztmsimon 2014-08-25
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
如果说尽在必要的地方才使用“锁”这对你来说是值得忧虑的,你就别使用什么多线程了。 最保险的做法就是什么都不做。什么都不做,保证不会出现bug!
我GUI中的两个线程都会调用DLL中的同一个函数,什么都不做难道不会出问题?真是想不明白啊?
ztmsimon 2014-08-25
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
锁不能在调用层次上,也不能在函数层次上,应该是在最细颗粒的代码内部去处理。否则如果你的锁是滥用的,你还整什么多线程编程啊?
锁在最细颗粒的代码内部去处理? 是指在我GUI的多线程中的代码进行处理? 还是指在我DLL中封装的那个总被调用的函数进行处理?
  • 打赏
  • 举报
回复
引用 楼主 ztmsimon 的回复:
但是这样,GUI中的线程是否会冲突?我觉得极限情况下是会导致异常的啊?不知道别人都是如何编写可并行的动态链接库的哦?~
如果说尽在必要的地方才使用“锁”这对你来说是值得忧虑的,你就别使用什么多线程了。 最保险的做法就是什么都不做。什么都不做,保证不会出现bug!
  • 打赏
  • 举报
回复
锁不能在调用层次上,也不能在函数层次上,应该是在最细颗粒的代码内部去处理。否则如果你的锁是滥用的,你还整什么多线程编程啊?
threenewbee 2014-08-22
  • 打赏
  • 举报
回复
要想编写可并发的代码,无论是不是dll,都需要遵循如下准则: 不以并发的方式调用线程不安全的代码,使用必须独占的资源/设备以及使用任何非栈上的数据都要加锁。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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