многопоточный безопасный класс - PullRequest
1 голос
/ 29 июня 2011

Вопрос:

A) Напишите потокобезопасный класс с методами doA (), doB (), doC (). Каждый из этих методов должен сообщать имя метода, время вызова и имя вызывающего потока.

B) Напишите многопоточный драйвер, который порождает 4 потока, и каждый поток должен вызывать каждый метод - doA (), doB (), doC () - 10 раз

Я предполагаю, что это означает, что doA (), doB (), doC () должны быть безопасными. Но ни один из них не изменяет общее состояние внутри объекта, они просто читают состояние объекта, такое как имя метода, имя потока и время выполнения. Итак, мне нужно синхронизировать каждый метод? Для счетчика в каждом потоке он не используется совместно.

Я немного запутался, какое состояние объекта нуждается в защите?

Edit: Нужен ли нам механизм для обеспечения работающей последовательности doA (), doB (), doC ()? Я так не думаю.

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

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

Thread: A
Method: doA
Running Time: 4.6s

Тогда я бы хотел убедиться, что другой поток не начинается на полпути. В противном случае вы можете получить что-то вроде этого:

Thread: A
Thread: B
Method: doB
Running Time: 4.6s
Method: doA
Running Time: 3.2s

Не очень полезно.

3 голосов
/ 29 июня 2011

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

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