同一个DLL能同时被不同程序调用,那DLL中的变量函数等会发生冲突吗?比如:两个程序都在同时调用DLL中的同一个函数或同一个变量,这个时候有冲突吗?都说各个程序调用同一个DLL的时候,都各自有自己的一份DLL的拷贝,所以不会发生冲突。如果真是这样,那假设换成这样的情况:一个程序里面多个线程调用同一个DLL的同一个函数时,那各个线程还有各自的DLL的拷贝吗??这个时候是不是会发生冲突?
刚接触多线程,对线程的协调同步问题感觉很烦,所以有了这个疑问。
如果多线程中各自有自己的DLL拷贝,那也就不用考虑同步问题了。
呵呵,见笑了。
偶是个懒人,才有这样可笑的想法。知道问题答案的兄弟,请简单回答一下吧。
谢谢

解决方案 »

  1.   

    同一进程中只有1份dll拷贝
    如果变量是全局变量,那么将导致混乱。
      

  2.   

    多个程序调用同一个DLL,系统的内存中只有一份该DLL的COPY,系统根据引用记数来确定是否从内存中删除该COPY
    同一个进程的多个线程调用DLL中的同一个函数,如果该函数是可重入的,则不需做同步。如果不是可重入的,如访问了DLL中的全局变量,则需在进程中做同步。
      

  3.   

    回复人: gohappy_1999(碧水蓝天) ( ) 信誉:100  2005-11-24 19:51:00  得分: 0  
     
     
       多个程序调用同一个DLL,系统的内存中只有一份该DLL的COPY,系统根据引用记数来确定是否从内存中删除该COPY
    同一个进程的多个线程调用DLL中的同一个函数,如果该函数是可重入的,则不需做同步。如果不是可重入的,如访问了DLL中的全局变量,则需在进程中做同步。
      
     
    严重同意
    dll如果有共享数据,如 #prama data_seg("mydata")
    ...
    #prama data_seg()
    mydata共享数据段的数据是所有进程共享的,需要同步的
    其它的没事
      

  4.   

    其它的没事=======
    No,即使是普通的全局变量,也要同步的。dll的函数这个最简单,是整个系统维持一份拷贝。
    pragma dataseg的数据也是整个系统维持一份拷贝。
    但dll中的全局变量是每个调用进程维持一个拷贝。因此,如果在同一进程中多个线程访问这个全局变量,那么当然要产生冒险