Я написал нестатический класс.Разрыв параллельных потоков
В этом классе существует нестатический метод, который вызывает статический метод того же класса. В этом статическом методе в анонимных методах (или лямбда-выражениях) запускаются 2 или более разных потока, которые выполняют некоторую работу на очень большом массиве независимо.
Это прекрасно работает! Отличная производительность, никаких проблем .....
Но ... существует также общедоступное статическое свойство, защищенное объектом статической блокировки ..., которое я не использую для каких-либо других целей, кроме как для блокировки этого статическое свойство.
Все вместе выглядит как-то так:
public class testClass
{
private volatile static bool cancelProcessing;
private static readonly object lockObj = new object();
public static bool CancelProcessing
{
get
{
lock (lockObj)
{return cancelProcessing;}
}
set
{
lock (lockObj)
{cancelProcessing = value;}
}
}
public void callingMethod()
{
staticThreadsMethods();
}
private static void staticThreadsMethods()
{
int parts = 4; // array parts
CountdownEvent _countdown = new CountdownEvent(parts);
for (int u = 0; u < parts; u++)
{
Threads[u] = delegate(object counter)
{
// array gets processed
_countdown.Signal();
};
}
_countdown.Wait();
}
}
после вызова callingMethod()
, 2 или 4 например, или более потоков запускаются в то же время, как анонимные делегаты (или лямбда-выражения) в staticThreadsMethods()
...
Теперь, что я действительно не могу понять следующее:
Меняется I значения свойства CancelProcessing
из другого потока, в то время как все нити работают параллельно , хотя это свойство не используется в потоках (оно должно было использоваться для отмены потоков, но у меня всегда были одни и те же ошибки/исключения), я получаю исключение System.AccessViolationException, потому что небезопасный указатель на массив не может быть разыменован. Указатель недействителен больше (??), когда я просто изменяю значение свойства, но не делаю ничего другого. Почему?
Возможно, вам стоит взглянуть на то, что http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – didierc
конец вашего вопроса, в частности, трудно следовать: вы должны начать с правильного изложения всех фактов, а затем задать свои вопросы, указав при необходимости соответствующие факты. – didierc
Да, вы правы .... Я буду рассматривать ваши комментарии в следующий раз :) – BlueAutumn