Синхронизация потоков - PullRequest
       12

Синхронизация потоков

0 голосов
/ 19 января 2010

У меня есть список объектов, для каждого объекта я хочу запустить совершенно отдельный поток (безопасный поток), например .... я выберу один объект из моего списка в цикле while и запустлю поток, а затем для следующего объекта запустим следующие потоки ... все поток должен быть синхронизирован так, чтобы разделяемые ими ресурсы (значения / соединения (закрывать / открывать)) не менялись .....

Ответы [ 2 ]

2 голосов
/ 19 января 2010

Начало потока для объекта не всегда целесообразно; у вас, вероятно, должно быть небольшое количество рабочих потоков, выбирающих элементы из списка (или, что лучше, Queue<T>), синхронизирующих доступ к этому списку / очереди. Пример потокобезопасной очереди можно найти в этой теме .

Как только у вас будет рабочий элемент, не будет волшебной палочки для того, чтобы остальная часть написанного вами кода (для его обработки) была поточно-ориентированной. Разумным подходом, который делает вещи простыми, является неизменность - либо истинная неизменность (элементы не могут изменить), либо просто не изменяет объект . Конечно, вы можете реализовать блокировку вокруг рабочего элемента, но это помогает, только если all ваш код использует ту же стратегию блокировки, которую трудно применить.

0 голосов
/ 19 января 2010

я выберу один объект из моего списка в то время как цикл и запустить поток и затем для следующего объекта запустить следующий нити

Если бы я действительно хотел поток для объекта, чего я, вероятно, не хотел бы, я бы создал такой класс:

class ObjectProcessingThread
{
Thread processingThread = new Thread();
public TargetObject { get; set;}

public Start()
{
    //start the processing thread with threadEntryPoint as the work the thread will do
} 

private threadEntryPoint
{
   //do stuff with targetObject
}
}

Затем в цикле while создайте ObjectProcessingThread для каждого объекта, установите его свойство TargetObject и затем вызовите Start.

весь поток должен быть синхронизирован таким что ресурсы (ценности / связь (закрыть / открыть) не меняется .....

Если вы не хотите, чтобы значения менялись, не меняйте их.

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