As Alf said, it is indeed possible you have a case of "split
personality", i.e. there is not a single physical instance of the static
currAsync array as you think, but more. This might be caused by Windows
DLL peculiarities, but also for example if class dspt is actually a
class template and you instantiate it with slightly different types in
different places.
To fight with the DLL split:
1. Move all the functions accessing currAsync offline into a .cpp file
which is compiled only into a single DLL.
2. Fix all ensuing compiler and linker errors by adding needed
dllexport specifiers/macros and linker options.
3. Done.
In general, static variables should be best avoided as they do not scale
and cause a myriad of other problems. The client software should first
create an "engine" or "context" object via the special "init-library"
routine. This object would contain the data that was static before. The
client will pass the pointer to this object to all library functions
needing it (either as 'this' or as a normal parameter).
Voila, now the client has for example an ability to create two different
thread pools if it ever feels like so. As a bonus, the thing will work
regardless of the DLL boundary issues and static initialization order
fiascos.