Compartilhando variáveis ​​entre C # e C ++

Eu estou escrevendo um software em c # que precisa chamar muitas vezes e por muitos threads uma função em uma DLL não gerenciada c ++.

Eu tenho um arquivo C ++ assim:

// "variables" which consist in some simple variables (int, double) 
//  and in some complex variables (structs containing arrays of structs)


extern "C"
{
     __declspec(dllexport) int function1()
    {
        // some work depending on random and on the "variables"
    }
}

e uma classe C # assim

public class class1
{
    //  "variables" <--- the "same" as the C++ file's ones 
    //  Dll import <--- ok

    public void method1()
    {
        int [] result;

        for(int i=0; i<many_times; i++)
        {
            result = new int[number_of_parallel_tasks];                

            Parallel.For(0, number_of_parallel_tasks, delegate(int j)
            { 
                 // I would like to do  result[j] = function1()  
            });

            //  choose best result
            //  then update "variables" 
        }
    }

}

Eu escrevi "Eu gostaria de fazer ..." porque a função c ++ precisa em cada rodada para ter as "variáveis" atualizadas também.

Minha pergunta é:

É possível compartilhar memória entre C ++ e C # para evitar a referência de passagem toda vez? É apenas uma perda de tempo?

Eu li sobre arquivos mapeados na memória. Eles poderiam me ajudar? No entanto, você conhece soluções mais adequadas?
Muito obrigado.

questionAnswers(3)

yourAnswerToTheQuestion