我想应该不是线程安全的,DLL只是共享进程的堆栈而不是共享线程的堆栈.
只是上来让大家肯定一下.如果是不安全的,那有没有简单的办法搞得线程安全?
注意***不能被调用函数里设分界区***,这会严重影响性能!请大家发表一下意见.ps.很久没来csdn了,不知道这里人气还行不.

解决方案 »

  1.   

    关键不是什么函数的问题,应该是函数中是否存在全局资源的访问,这样就不安全了。
    某些情况用TLS可以解决
    其他用临界区,信号量以及其他内容。觉得看一下Aiminggoo的《Delphi源码分析》是不错的,建议楼主也看看,里面对多线程的讲解不错。
      

  2.   

    to hottey(点亮心灵)(基础补习中) 
    Aiminggoo的《Delphi源码分析》在哪里可以下?感谢了,省得费力去搜索了.
      

  3.   

    现在只有部分章节下载,在www.2ccc.com上应该有吧!
    不过书本身不贵,40RMB-还是买一本吧
      

  4.   

    我想应该不是线程安全的,DLL只是共享进程的堆栈而不是共享线程的堆栈.
    只是上来让大家肯定一下.这要看你的DLL里面的函数的处理了 比如是否存在对同一资源的存取,是不是线程安全的。。
    比如说你打开文件 如果用独占方式打开 那么是安全的 否则可能会不安全。
      

  5.   

    感谢大家的参与!
    我一时糊涂了,函数的堆栈是建立在调用者里面的,(在我这个问题里面,DLL里面的函数的堆栈是建立在调用者线程之上的,这样如果没用到全局变量的话,就没问题;反而用到全局变量就要保护了).
    上面的一个朋友说的很对:
    hottey(点亮心灵)(基础补习中):应该是函数中是否存在全局资源的访问.
    而且我也已经通过试验了.这几天都在搞多线程,连接池之类的,脑子里都是临界区信号量这类的符号,很简单的一个基础问题被想复杂了.揭帖了,谢谢大家的参与!
      

  6.   

    补充:不要被DLL给弄糊了,其实多线程调用DLL里的函数和调用普通的本地函数本质是一样的.