Я очень мало знаю о многопоточности, но я работаю с кодом другого пользователя и нуждаюсь в некоторой помощи, поскольку оригинального программиста больше нет.
Программа имеет свой собственный exe для запуска, но DLL присоединяется к процессу другой программы через APIENTRY (WINAPI)... Когда DLL присоединяется к процессу, он создает пару мьютексов. Проблема в том, что один из этих мьютексов должен быть создан только один раз и должен быть доступен каждому процессу. Кажется, я не могу остановить каждый процесс от создания собственного дескриптора. По крайней мере, во время некоторой операции мне нужно иметь возможность передать дескриптор другим процессам или получить каждый дескриптор из каждого процесса и применить ту же операцию (в основном для синхронизации некоторых переменных). Я пробовал старый статический bool isFirst, но каждый процесс, похоже, создает новый набор переменных, поэтому он не работает.
Я действительно смущен и расстроен. Любые мысли или идеи будут высоко оценены.
Существует механизм прикрепления DLL, который вызывается каждый раз, когда процесс присоединяется (извините, я не могу вспомнить точное имя), и отдельно есть InitInstance, который вызывается при загрузке DLL. Поэтому, если вы сделаете mutex обрабатывает статические глобальные переменные с помощью DLL, создайте и iinitialise мьютекса в InitInstance и раздайте дескрипторы мьютекса любому процессу, который просит его, вы должны сделать лучше.
По-видимому, создаются отдельные экземпляры DLL, вызывающие отдельные сегменты данных. Мне удалось получить дескриптор одного значения в разных экземплярах с помощью data_seg. Теперь я понимаю, что у меня есть новая проблема, хотя я не могу использовать data_seg для фактической переменной (вектора объектов), которую мьютекс защищает от одновременной записи.