Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

multithreading - C#'s lock() in Managed C++

Does managed C++ have an equivalent to C#'s lock() and VB's SyncLock? If so, how do I use it?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

C++/CLI does have a lock class. All you need to do is declare a lock variable using stack-based semantics, and it will safely exit the monitor when its destructor is called, e.g.:

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

    // Do work

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

m_lock declaration depends on whether you are synchronising access to an instance or static member.

To protect instance members, use this:

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

To protect static members, use this:

static Object^ m_lock = gcnew Object(); // Type has a private lock -
                                        // protects static members.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...