Автоматически проверьте некоторые ограничения поточной обработки? (C#)

Наша кодовая база имеет большую поточную обработку ограничений, закодированных в комментариях - таких как:

  • Этот класс ориентирован на многопотоковое исполнение (ко всем открытым методам можно безопасно получить доступ от любого потока),
  • Должен содержать блокировку на "xyz" для получения доступ/вызывания к любым общедоступным участникам
  • Должен только быть получен доступ от потока "xyz" (обычно, но не всегда относящийся к потоку GUI)
  • Эта блокировка должна быть взята после блокировки "xyz", если оба требуются

Первые три видны на обоих классах и отдельных участниках.

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

Можно ли предложить, чтобы инструмент сделал что-то вдоль этих строк? Возможно, FxCop ruleset, который работает путем кодирования вышеупомянутых ограничений атрибутами?

6
задан Roman Starkov 25 January 2010 в 16:01
поделиться

3 ответа

Я не знаю о любых атрибутах безопасности потоков безопасности, просто потому, что это, как правило, слишком сложно. И «тестирование» резьбового кода (с добавлением дополнительных Debug.assert и т. Д.) - это распространенная причина Heisenbugs. Вы могли бы посмотреть на « шахматы ? Это не серебряная пуля, но это может быть полезно.

1
ответ дан 17 December 2019 в 22:13
поделиться

Не уверен, как вы это сделаете во время компиляции, но, возможно, PostSharp можно использовать для определения ограничений, а не оставлять их в комментариях (например, ваши ограничения могут быть указаны как атрибуты методов или класса).

0
ответ дан 17 December 2019 в 22:13
поделиться

Вы можете попробовать реализовать некоторые пользовательские правила FXCOP (срабатывают с использованием соответствующего атрибута). Это может помочь вам проверить некоторое простое состояние (например, этот класс безопасен в потоке, потому что он не содержит мультипликационного состояния).

Другая проверка, скорее всего, будет сложнее (например, fxcop подтвердит, что при установке поля "x" всегда выполняется так, когда мы держим данный замок) - возможно. Если это важно, я бы предложил посмотреть на SDK FXCOP и увидеть, насколько сложно будет такой тест.

Я обнаружил, что реализация пользовательских правил FXCOP очень полезна, особенно когда мы контролируем структуру классов, которые мы тестируем.

0
ответ дан 17 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: