#c# #.net-core #concurrency
#c# #.net-core #параллелизм
Вопрос:
Я хотел бы понять, есть ли какие-то проблемы с параллелизмом, передающим объект нескольким классам. Пример
class A: interfaceA{
private object attribute;
public A ()
{
}
public bool doSomething(){
Console.writeline("Happy new year :)");
// other non static operations
}
}
class B: interfaceB{
private InterfaceA classA;
public B(interfaceA classA){
this.classA = classA;
}
public bool elaborate(){
return classA.doSomething();
}
}
class C: interfaceC{
private InterfaceA classA;
public C(interfaceA classA){
this.classA = classA;
}
public bool elaborate(){
return classA.doSomething();
}
}
public void Main(){
classA A = new classA();
classB B = new classB(A);
classC C = new classC(A);
}
Это общий пример, просто чтобы дать вам представление.
Спасибо вам всем 🙂
Комментарии:
1. С конкретным кодом, которым вы поделились, проблем не будет.
2. Поскольку вы не изменяете и / или не считываете данные одновременно, все в порядке.
3. Оба комментария выше основаны на том факте, что все, что вы
interfaceA.doSomething()
делаетеConsole.WriteLine("Static string");
, — это то, что является потокобезопасным. Ответ на этот вопрос во многом зависит от того, чтоinterfaceA.soSomething()
делает4. Пожалуйста, исправьте ваш пример кода, чтобы он был допустимым кодом на C #. имя интерфейса не может быть запущено с
#
(CS1040)5. Каково значение знака хэша (#) в вашем примере?
Ответ №1:
При написании многопоточного кода вы должны знать о потенциальных опасностях. Если это не так, то не пишите многопоточный код!
В качестве общего эмпирического правила в.Net framework, статические методы должны быть потокобезопасными, но методы экземпляра не являются, если иное не указано в комментариях. Ваш код вызывает только статический потокобезопасный метод. Но вы, скорее всего, сделаете код не потокобезопасным, если внесете в него какие-либо изменения.
Существует множество ресурсов, описывающих потенциальные проблемы, гораздо больше, чем можно описать здесь. Например, рекомендации Microsoft. Или статья Джона Скита по этому вопросу