Я разрабатываю DLL в MS VC express c ++, которая будет загружаться в несколько клиентских приложений одновременно, DLL имеет пространство общей памяти, созданное с использованием data_seg(".SHARED_SPACE_NAME")
. В этом пространстве общей памяти есть несколько векторов, которые можно изменить.
Предположим, у нас есть функция в теле DLL с именем doCalc ():
_DLLAPI void __stdcall doCalc(int argument)
{
//Add to vector
//Loop through vector
//Erase from vector
//etc.
}
Если doCalc
вызывается одновременно из двух или более клиентских приложений, происходит сбой системы.
Я хочу, чтобы вызовы doCalc «ждали в очереди» до завершения предыдущего вызова - как если бы это было однопоточное приложение.
Таким образом, если клиент 1 вызывает, а затем сразу после вызова клиента 2, то клиент 1 должен завершить функцию, а затем клиент 2 должен запустить функцию.
Лучшим решением было бы запустить DLL как единый поток, но я искал в Интернете, я не думаю, что это возможно.
Я попытался найти эту проблему в Интернете, и я нашел кое-что о том, как сделать функцию static
сделавшей ее поточно-безопасной.
Я также читал, что C ++ 0x каким-то образом сделает этот потокобезопасным. Но это не поддерживается в MS VC express.
У меня нет опыта в многопоточности, поэтому я надеюсь, что вы можете помочь. Заранее спасибо.