请教各位,我现在有一个算法用matlab封装成dll,但是执行速度太慢,所以想去并行调用此dll,但是用parallel.for执行时每次运行到调用dll时却变成顺序执行,请问是哪里出现了问题。
    网上查找了资料一个进程里只能调用一个dll副本,然后多线程共享此副本,是不是这个原因?有什么办法去实现并行调用dll文件呢?请不吝赐教

解决方案 »

  1.   

    取决于dll中的函数是否是线程安全的,很有可能不是,所以没办法并行调用,你可以尝试使用多个进程,并且用某种机制实现进程的同步和通讯,比如rpc、管道、互斥等等,进程的通信成本比较高,但是如果你的确有大量数据的话,还是可以考虑一试的。
      

  2.   

    多线程就可以并行了,可能是你的dll内部做了同步限制,只能单线程运行,
      

  3.   

    感谢楼上两位指点,但还有点疑问,请问一般什么情况下会限制dll的同步调用?
    我的dll是matlab编译的,内部并没有全局或静态变量,这样是否是线程安全的?
    我把相同的代码封装成不同名字的dll,内部的类名也不一样,这样一个程序同时调用两个不同dll是否可行?
    多谢!
      

  4.   

    这不好说,我打个比方,matlab如果调用一个自己的库函数,而这个函数本身是线程不安全的,那么就会出问题。