多线程调用DLL里的同一个函数是不是线程安全的? (up有分)

BoningSword 2004-11-11 12:03:38
我想应该不是线程安全的,DLL只是共享进程的堆栈而不是共享线程的堆栈.
只是上来让大家肯定一下.

如果是不安全的,那有没有简单的办法搞得线程安全?
注意***不能被调用函数里设分界区***,这会严重影响性能!

请大家发表一下意见.

ps.很久没来csdn了,不知道这里人气还行不.
...全文
463 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
BoningSword 2004-11-11
  • 打赏
  • 举报
回复
to hottey(点亮心灵)(基础补习中)
Aiminggoo的《Delphi源码分析》在哪里可以下?感谢了,省得费力去搜索了.
hottey 2004-11-11
  • 打赏
  • 举报
回复
关键不是什么函数的问题,应该是函数中是否存在全局资源的访问,这样就不安全了。
某些情况用TLS可以解决
其他用临界区,信号量以及其他内容。

觉得看一下Aiminggoo的《Delphi源码分析》是不错的,建议楼主也看看,里面对多线程的讲解不错。
zwjchina 2004-11-11
  • 打赏
  • 举报
回复
这个问题值得关注一下!
o2delphi 2004-11-11
  • 打赏
  • 举报
回复
临界区不行,试试互斥量,信号量。不过没测过,不知性能如何。
BoningSword 2004-11-11
  • 打赏
  • 举报
回复
补充:不要被DLL给弄糊了,其实多线程调用DLL里的函数和调用普通的本地函数本质是一样的.
BoningSword 2004-11-11
  • 打赏
  • 举报
回复
感谢大家的参与!
我一时糊涂了,函数的堆栈是建立在调用者里面的,(在我这个问题里面,DLL里面的函数的堆栈是建立在调用者线程之上的,这样如果没用到全局变量的话,就没问题;反而用到全局变量就要保护了).
上面的一个朋友说的很对:
hottey(点亮心灵)(基础补习中):应该是函数中是否存在全局资源的访问.
而且我也已经通过试验了.

这几天都在搞多线程,连接池之类的,脑子里都是临界区信号量这类的符号,很简单的一个基础问题被想复杂了.

揭帖了,谢谢大家的参与!
aiirii 2004-11-11
  • 打赏
  • 举报
回复
如果是單純數值計算, 我想是沒有問題的!
tfxg 2004-11-11
  • 打赏
  • 举报
回复
不会,在研究当中
beyondtkl 2004-11-11
  • 打赏
  • 举报
回复
我想应该不是线程安全的,DLL只是共享进程的堆栈而不是共享线程的堆栈.
只是上来让大家肯定一下.

这要看你的DLL里面的函数的处理了 比如是否存在对同一资源的存取,是不是线程安全的。。
比如说你打开文件 如果用独占方式打开 那么是安全的 否则可能会不安全。
WGYKING 2004-11-11
  • 打赏
  • 举报
回复
嘻嘻~~
hottey 2004-11-11
  • 打赏
  • 举报
回复
现在只有部分章节下载,在www.2ccc.com上应该有吧!
不过书本身不贵,40RMB-还是买一本吧

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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