Полезны ли заблокированные * функции в общей памяти?

StackOverflow https://stackoverflow.com/questions/1637725

Вопрос

Два процесса Windows сопоставили в памяти один и тот же общий файл.Если файл состоит из счетчиков, уместно ли использовать Interlocked* функции (например InterlockedIncrement) чтобы обновить эти счетчики?Будут ли они синхронизировать доступ между процессами?Или мне нужно использовать что-то более тяжелое, например мьютекс?Или, возможно, сам механизм общей памяти обеспечивает согласованность представлений.

Это было полезно?

Решение

От MSDN:

...

Взаимосвязанный API

Взаимосвязанные функции обеспечивают простой механизм синхронизации доступ к переменной, которая является общей для нескольких потоков.Они также выполняют операции над переменными атомарным образом.Потоки разных процессов могут использовать эти функции, если переменная находится в общей памяти.

Так что, да, это безопасно при вашем подходе с общей памятью.

Другие советы

Взаимосвязанные функции предназначены именно для этого типа использования.

От http://msdn.microsoft.com/en-us/library/ms684122.aspx:

Потоки разных процессов могут использовать эти функции, если переменная находится в общей памяти.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top