多线程应用调用的Windows DLL函数是否运行在调用线程?
Windows DLL多线程调用的执行上下文问题
- 答案很明确:DLL里的函数肯定是在发起调用的那个线程上执行。你的应用里某个线程调用了触发DLL函数的线程函数,那DLL函数的执行就完全跑在这个调用线程的上下文中,不会自己开新线程,也不会跳去别的线程。
- 关于多线程处理的问题:如果你的DLL函数没碰共享资源(比如全局变量、静态变量、多个线程共用的句柄之类的),那确实不用额外做多线程相关的处理。但要是函数里有多个线程可能同时读写的共享数据,那必须加同步保护,比如用
CriticalSection或者Mutex这类Windows同步对象,不然很容易出现竞态条件,搞坏数据甚至让程序崩掉。 - 额外提一句:DLL是被整个进程加载的,进程里的所有线程都能调用它导出的函数,每个调用的执行上下文都是调用者自己的线程,和DLL的加载机制没关系——加载是进程层面的事,函数执行是线程层面的上下文。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

