#vb.net #multithreading
#vb.net #многопоточность
Вопрос:
Я в vb.net и иметь функцию, к которой будут доступны несколько потоков. Все внутри функции использует локальные переменные. Однако каждый поток будет передавать свой собственный набор данных по ссылке.
Из того, что я прочитал, локальные переменные не должны быть проблемой, но я думаю, что поступающий набор данных вызывает беспокойство.
Как я должен контролировать доступ / выполнение этой функции, чтобы убедиться, что она потокобезопасна? Спасибо.
Ответ №1:
Предполагая, что под ‘dataset’ вы подразумеваете System.Data.DataSet
, если ваша функция выполняет только чтение из dataset, то вам в любом случае не нужна синхронизация, поскольку «Этот тип безопасен для многопоточных операций чтения» (от http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx ).
Если вы изменяете набор данных, то, пока каждый набор данных является другим экземпляром, проблем возникнуть не должно.
Если вы изменяете данные и если разные потоки могут передавать ссылку на один и тот же набор данных, вам потребуется синхронизировать доступ к набору данных, используя Monitor
( SyncLock
или lock
на C #) или какой-либо другой метод синхронизации.
Комментарии:
1. Ваш ответ имеет смысл. Должно быть что-то, что я делаю, что вызывает проблему. Я получаю ошибки со стеками вызовов и другими зарегистрированными данными, которые заставляют меня думать, что у меня какая-то проблема с потоками. Я предоставлю еще немного информации и посмотрю, поможет ли это. Мне интересно, нужно ли мне просто установить мою функцию как общую.
2. Я беру System.Data.DataSet, который поступил, и перебираю каждую строку, заполняя локальные переменные, вызывая методы для получения дополнительных данных из базы данных и т.д. Набор данных может содержать несколько сотен строк, поэтому ожидается, что его обработка займет некоторое время.
3. @Scott: возможно, вам потребуется опубликовать какой-нибудь пример кода, чтобы было понятно, что происходит. Безусловно, существуют всевозможные проблемы — некоторые тонкие, некоторые очевидные — которые могут возникнуть при обработке потоков.