Безопасно ли вызывать методы AutoResetEvent из разных потоков?

Безопасно ли вызывать методы AutoResetEvent из разных потоков? Или мне следует избегать вызовов объекта из разных потоков?

class Test 
{
    EventWaitHandle wh = new AutoResetEvent(false);
    Thread worker = new(Work);

    public Test
    {
        worker.Start();
    }

    public void StopSignal()
    {
        wh.Set(); //<-- Main thread Call
    }

    void Work() 
    {
        wh.WaitOne(); //<-- Child thread call
    }
}

person Mixer    schedule 31.01.2013    source источник
comment
Он предназначен для работы (общения) между потоками. Если бы это не было безопасно, то WaitHandles были бы бесполезны.   -  person Henk Holterman    schedule 31.01.2013
comment
вам будет трудно выбрать правильный ответ!   -  person Boppity Bop    schedule 01.02.2013


Ответы (3)


Да, безопасно вызывать методы AutoResetEvent из разных потоков. Взгляните на эту ссылку. Я надеюсь, что это прояснит вас.

person akshayb    schedule 31.01.2013

Это нормально - это то, для чего он предназначен!

См. этот MSDN. статья для получения дополнительной информации. Внизу есть раздел под названием «Безопасность потоков», который указан для большинства классов в MSDN, поэтому, если вы не уверены, будут ли какие-либо другие классы потокобезопасными в будущем, вы можете просто проверить там.

person Cashley    schedule 31.01.2013

Весь смысл AutoResetEvent и ManualResetEvent как раз в том, чтобы обеспечить синхронизацию между разными потоками!

см. эту статью для деталей.

person Immortal Blue    schedule 31.01.2013