2010-07-19 3 views
2

Я создал объект, который имеет конкретный метод обработки различных событий и будет работать до тех пор, пока мое приложение не будет запущено. Я также создал отдельных делегатов, указывающих на каждый метод и ссылающихся на х число потоков. Учитывая, что y и z thread будут вызывать метод1 с помощью делегата, указывающего на него, будет ли z-поток ждать завершения потока y до того, как он сможет использовать метод1? или они могут вызывать его одновременно?Выполнение многопоточности и делегирование

ответ

2

Если вы не используете блокировку или какой-либо другой мьютекс, каждый поток будет ссылаться на метод, стоящий за делегатом, параллельно. Они не будут ждать друг друга.

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

+0

Спасибо за обновления. Если я собираюсь предоставить механизм блокировки, который является частью объекта, обрабатываемого чем-то вроде объекта SyncRoot, делает ли это другие потоки для ожидания других потоков? или единственные потоки, которые будут ждать, будут потоками, обрабатывающими один и тот же объект? – powerbox