C# lock() в управляемом C++

Имеет ли управляемый C++ эквивалент C# lock()? и SyncLock VB? Если да, то как мне его использовать?


person Brian    schedule 02.09.2009    source источник


Ответы (4)



C++/CLI имеет класс lock. Все, что вам нужно сделать, это объявить переменную блокировки, используя семантику на основе стека, и она безопасно выйдет из монитора при вызове ее деструктора, например:

#include <msclr\lock.h>
{    
    msclr::lock l(m_lock);

    // Do work

} //destructor of lock is called (exits monitor).  

m_lock зависит от того, синхронизируете ли вы доступ к экземпляру или статическому члену.

Чтобы защитить членов экземпляра, используйте это:

Object^ m_lock = gcnew Object(); // Each class instance has a private lock - 
                                 // protects instance members.

Чтобы защитить элементы static, используйте это:

static Object^ m_lock = gcnew Object(); // Type has a private lock -
                                        // protects static members.
person Sereger    schedule 23.09.2011
comment
Удалены «опасные вещи» с «выполняйте работу», чтобы не разрушать людей. Спасибо за ваши комментарии. - person Sereger; 26.09.2011
comment
Я не знаком с С++, как вы объявляете 'x'? Спасибо - person Bastiflew; 28.06.2013
comment
Правила объявления 'x' такие же, как и в C#, как описано здесь: msdn. microsoft.com/en-us/library/c5kehkcz.aspx. Подводя итог, руководство таково: - определите его как частный объект, если вы хотите защитить переменную экземпляра; - определите его как частную переменную статического объекта, если вы хотите защитить статическую переменную (или если критическая секция возникает в статическом методе в данном классе). Спасибо за ваш вопрос - я улучшу ответ. - person Sereger; 29.06.2013

В C++ нет эквивалента ключевому слову lock. Вместо этого вы можете сделать это:

Monitor::Enter(instanceToLock);
try
{
    // Only one thread could execute this code at a time
}
finally
{
    Monitor::Exit(instanceToLock);
}
person Darin Dimitrov    schedule 02.09.2009

Попробуйте Threading.Monitor. И лови.

person ima    schedule 02.09.2009