程序加载了一个dll,之后该程序的多个线程调用一个dll的同一个接口。
一个线程调用dll的这个接口之后,这个接口还没有返回,另一个个线程又调用了这个接口,那么dll中,是处理怎么第二个调用的?是让第二个调用等待,还是和第一个接口并行调用?

解决方案 »

  1.   

    如果在DLL的接口中没有数据冲突(如对同一内存的使用和销毁),各个线程同时使用没有问题,如果有冲突(如资源对象,像串口SOCKET等),就需要加锁,同一时间只能有一个线程在使用接口逻辑。
      

  2.   

    Dll多线程调用,Windows会有同步处理,所以要防止造成死锁
      

  3.   

    没听说过:多个线程调用一个dll的同一个接口时,Windows会有同步处理。多个线程可以任意调用一段代码(自己程序的代码也好,DLL的接口方法也好)。
    如果任意调用会导致逻辑错误(比如一个线程调用未返回,另一个线程又去调用),就必须给方法加上同步保护。
      

  4.   

    异步调用如果涉及全局资源则需要加锁,如果是形如 int add(int a,int b)
     {return a+b;}这种就不需要,若这dll非你所开发,那该咨询相应开发人员。
      

  5.   

    跟你的普通代码一样的调用机制,没有任务特殊之处,DLL加载到你的进程空间了,你多线程执行DLL的代码,和你多线程执行自己写的代码一样,没什么特别的,多线程调用该注意的地方也都一样。
      

  6.   

    如果DLL或者线程中没有同步机制的话,当然会并行执行