Общий элемент данных класса среди всех экземпляров класса в одном потоке - PullRequest
0 голосов
/ 05 сентября 2018

В моем C# проекте MVC у меня есть статический член в классе, который обновляется другим экземпляром того же класса. Но проблема в том, что все потоки, у которых есть экземпляр этого класса, также используют одну и ту же память для обновления статической переменной. Но я не хочу, чтобы переменная распределялась между потоками.

Есть ли способ, с помощью которого я могу сделать так, чтобы член данных класса был общим для всех экземпляров класса в одном и том же потоке, но создать новую область памяти, если в другом потоке?

1 Ответ

0 голосов
/ 05 сентября 2018

Это может или не может удовлетворить ваши потребности, но один из возможных способов решить эту проблему - использовать Статическое поле потока

ThreadStaticAttribute Class

Указывает, что значение статического поля уникально для каждого потока.

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

Примечание о том, что помимо применения атрибута ThreadStaticAttribute к полю вы также должны определить его как static

public class Example
{
   [ThreadStatic] static double previous = 0.0;
   [ThreadStatic] static double sum = 0.0;
   [ThreadStatic] static int calls = 0;
   [ThreadStatic] static bool abnormal;
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...