Я развиваю общую библиотеку (.so) и dll. У меня есть глобальная переменная, которая обновлена в нескольких нитях. Таким образом, у меня есть замок mutex для синхронизации.
Я не ясен, разделены ли глобальные данные в общей библиотеке через процесс. Если это тогда, я должен использовать семафоры для синхронизации. Поскольку я понимаю, что глобальные переменные - часть сегмента данных, таким образом, я хотел понять, как dll управляет глобальными данными через процессы. Любая информация w.r.t. dll формат и сегмент будет полезна.
Спасибо.
По умолчанию глобальные переменные не разделяются между процессами.
Однако можно использовать сегмент данных (data_seg) для распределения глобальных переменных между процессами. Более подробную информацию о MSDN можно найти в статье под названием "Как обмениваться данными в моей DLL с приложением или с другими DLL?"
.Абсолютно нет. Каждый процесс имеет свое виртуальное пространство памяти и не видит памяти других процессов. Два процесса могут даже хранить разное значение по одному и тому же адресу, скажем 1000000 - потому что их виртуальные адреса "1000000" отображаются на разные ячейки физической памяти (например, на "2000000" для первого процесса и на "3000000" для второго). Общая dll ничего в этом не меняет.
.