windows - Kør flere 'forekomster' af en ikke-tråd sikker Dll?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en dll med kildekode, der ikke er tråd sikker endnu. Dll'en er ret kompleks, og det tager lang tid at gøre det tråd sikkert. Så jeg kom med ideen til at køre flere eksemplarer af Dll'en selvstændigt. Den nemmeste ting ville sandsynligvis være at oprette N omdøbt kopier af Dll og at indlæse en separat Dll per tråd.


Er dette en mulig løsning?
Er der en bedre lignende måde?
Er der muligvis noget indpakningskode eksisterende?


Jeg ved, at dette slet ikke er en god teknik løsning. Vær venlig at bebrejde mig. Men det kan løse en række problemer.


REDIGER 2017


Jeg har gjort dette, og det virker uden problemer. Fantastisk!
Bemærk dog følgende:


http://msdn.microsoft.com/en-us/library/2s9wt68x\%28v=vs.80\%29.aspx[1]


Hvis en DLL erklærer en ikke-lokal data eller objekt som \_\_declspec (tråd), kan det medføre en beskyttelsesfejl, hvis den er dynamisk indlæst.

Bedste reference


Denne løsning er helt mulig, og efter min opfattelse er den eneste levedygtige måde at håndtere en DLL med global tilstand, der ikke er trådsikker. Det er ikke smukt, men det virker.

Andre referencer 1


Det gør vi i nogle af vores projekter, som bruger Intel JPG-biblioteket til JPG-komprimering/dekompression, som er en single threaded DLL. Metoden fungerer fint, men som du siger er ikke en ideel løsning, da du 'potentielt øger den generelle hukommelsesbrug af din ansøgning, hvis den pågældende DLL tildeler meget hukommelse eller bruger mange ressourcer.