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