Несколько месяцев назад я столкнулся с этим интересным сценарием, заданным парнем (в orkut). Хотя я и придумал «непереносимое» решение этой проблемы (проверил его с помощью небольшого кода), но все же хотел бы знать, что вы, ребята, должны сказать и предложить.
Предположим, я создал DLL, экспортирующую некоторые функции, написанные на C ++, для однопоточного клиента . Эта DLL объявляет множество глобальных переменных, некоторые из которых могут быть константными (только для чтения), а другие - изменяемыми.
В любом случае, позже все изменилось, и теперь я хочу, чтобы одна и та же DLL работала с многопоточным приложением (без изменения DLL); это означает, что несколько потоков получают доступ к функциям и глобальным переменным из DLL и изменяют их ... и так далее. Все это может привести к тому, что глобальные переменные будут содержать несовместимые значения.
Итак, вопрос в том,
Можем ли мы что-то сделать в клиентском коде, чтобы предотвратить множественный доступ к DLL, и в то же время , гарантируя, что каждый поток выполняется в своем собственном контексте (то есть когда он получает доступ к DLL, глобальные значения DLL такие же, как и раньше)?