CreateMutex в двух разных программах, один и тот же дескриптор (GCC) - PullRequest
0 голосов
/ 19 сентября 2011

Я написал две программы, которые взаимодействуют через TCP.Эти две программы в принципе одинаковы.Сообщения хранятся во внутреннем буфере, прежде чем я отправлю их по протоколу TCP.Я использую мьютекс для защиты этого буфера для одновременного чтения / записи.Для тестирования я запустил эти две программы на одном компьютере и получил некоторые проблемы с синхронизацией.Я обнаружил, что CreateMutex всегда возвращает один и тот же дескриптор в обеих программах, и поэтому одна программа блокирует другую!

hBufferMutex = CreateMutex(NULL,FALSE,"BufferMutex");

Не имеет значения, какое имя я использую для мьютекса, оно всегда одинаковона обеих программах.Что я делаю не так?

1 Ответ

4 голосов
/ 19 сентября 2011

Если вы просто используете мьютекс в программе, используйте анонимное имя - NULL.Имя действительно используется только тогда, когда вы хотите обмениваться данными между двумя программами (... запущенными в одном сеансе входа в систему, который используется по умолчанию, или на одном и том же компьютере, если вы используете префикс 'global \'.)

В вашем случае вы могли бы использовать Критический раздел вместо мьютекса - это в основном более легкая версия, которую можно использовать только внутри процесса.

...