Как гарантировать, что только один пользователь может выполнить фрагмент кода одновременно - PullRequest
2 голосов
/ 14 декабря 2011

Меня попросили наложить ограничение на то, чтобы пользователи не могли одновременно выполнять часть кода, которая вызывает неуправляемый код C ++ из веб-приложения ASP.Net/C#.

Я хотел спросить, достаточно ли размещения блокировки (someobject) вокруг кода C #, который находится в библиотеке классов C #, которая вызывает код PInvoke / C ++, чтобы гарантировать, что только один пользователь сможет выполнить код? или есть другая техника?

Возможно, мне придется разместить этот код в качестве службы WCF. Будет ли этот подход работать тоже?

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011

Если вы используете WCF, вы можете принять ConcurrencyMode.Single , который автоматически гарантирует, что только один поток выполняет операцию в любой данный момент в одном экземпляре контекста.

В противном случае вам нужно будет использовать ручную синхронизацию потоков (как блокировку, мьютекс и т. Д.).

0 голосов
/ 14 декабря 2011

Размещение блокировки () для переменной во время выполнения этого кода - один из способов.

Статья Джо Албахари , вероятно, даст вам несколько полезных советов по поводу лучшего подходадля вашей системы.

Здесь также есть еще одно сообщение SO: Могу ли я добавить в функцию атрибут для предотвращения повторного входа? , который также может вам помочь.прошлое, которое я использовал [MethodImpl(MethodImplOptions.NoInlining)] (см. MSDN ), и оно служило, оно работало довольно хорошо для синхронных действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...