Сценарий: глобальные переменные в библиотеке DLL, которая используется многопоточным приложением

Несколько месяцев назад я наткнулся на этот интересный сценарий, который задал парень (в orkut). Хотя я придумал «непереносимое» решение этой проблемы (протестировал его с помощью небольшого кода), но все же хотел бы знать, что вы, ребята, можете сказать и предложить.

Предположим, я создал DLL, экспортирующая некоторые функции, написанная на C ++, для однопоточного клиента . Эта DLL объявляет множество глобальных переменных, некоторые из которых могут быть константными (только для чтения), а другие можно изменять.

Как бы то ни было, позже все изменилось, и теперь я хочу, чтобы та же самая DLL работала с многопоточным приложением (без изменения DLL); это означает, что несколько потоков обращаются к функциям и глобальным переменным из библиотеки DLL и изменяют их ... и так далее. Все это может привести к тому, что глобальные переменные будут содержать несовместимые значения.

Итак, вопрос в том,

Можем ли мы сделать что-нибудь в клиентском коде, чтобы предотвратить множественный доступ к DLL, и в то же время , гарантируя, что каждый поток работает в своем собственном контексте (то есть, когда он получает доступ к DLL, DLL ' s глобальные значения такие же, как и раньше)?

5
задан Nawaz 14 June 2013 в 12:49
поделиться