Вот моя попытка:
int* globalvar = new int[8];
void cpp_init(){
for (int i = 0; i < 8; i++)
globalvar[i] = 0;
}
void writeAtIndex(int index, int value){
globalvar[index] = value;
}
int accessIndex(int index){
return globalvar[index];
}
BOOST_PYTHON_MODULE(MpUtils){
def("cpp_init", &cpp_init);
def("writeAtIndex", &writeAtIndex);
def("accessIndex", &accessIndex);
}
и в python файле
def do_stuff(index):
writeAtIndex(index, randint(1, 100))
time.sleep(index/10)
print([accessIndex(i) for i in range(8)])
if __name__ == '__main__':
freeze_support()
processes = []
cpp_init()
for i in range(0, 10):
processes.append( Process( target=do_stuff, args=(i,) ) )
for process in processes:
process.start()
for process in processes:
process.join()
И результат такой:
[48, 0, 0, 0, 0, 0, 0, 0]
[0, 23, 0, 0, 0, 0, 0, 0]
[0, 0, 88, 0, 0, 0, 0, 0]
[0, 0, 0, 9, 0, 0, 0, 0]
[0, 0, 0, 0, 18, 0, 0, 0]
[0, 0, 0, 0, 0, 59, 0, 0]
[0, 0, 0, 0, 0, 0, 12, 0]
[0, 0, 0, 0, 0, 0, 0, 26]
Может кто-нибудь объясните, почему это не работает? Я пробовал напечатать глобальную переменную, и это всегда одно и то же значение. Не должно быть никаких условий гонки, так как ожидания от 0,1 до 0,8 секунды должно быть более чем достаточно, чтобы компьютер что-то написал. Разве C ++ не должен напрямую обращаться к местоположению указателя?
Спасибо