barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

суббота, 23 апреля 2011 г.

C# - аналог ключевого слова synchronized для методов в Java

Иногда нужно, чтобы некоторый метод объекта выполнялся в каждый момент времени только одним потоком (т.е. чтобы вызовы к данному методу объекта сериализовывались, т.е. ставились в очередь). Для такого контроля конечно можно использовать, например, семафор, но в Java было предусмотрено специальное ключевое слово - synchronized. В C# есть аналогичная конструкция, которая, правда, не является частью языка:
using System.Runtime.CompilerServices;

        [MethodImplAttribute(MethodImplOptions.Synchronized)]
        protected void someSyncMethod() { ... }
Также как и в Java, синхронизированными могут быть помечены сразу несколько методов класса, при этом, т.к. при вызове любого синхронизированного метода блокируется объект-хозяин, в любой момент времени возможно будет выполнение лишь одного из них.

Комментариев нет:

Отправить комментарий