How do I make a critical section with Boost?

前端 未结 2 679
礼貌的吻别
礼貌的吻别 2021-01-17 15:40

For my cross-platform application I have started to use Boost, but I can\'t understand how I can implement code to reproduce behavior of Win32\'s critical section or .Net\'s

相关标签:
2条回答
  • 2021-01-17 16:17

    Here's a rewrite of your example, using Boost.Thread: I removed the comments, but otherwise, it should be a 1-to-1 rewrite.

    boost::recursive_mutex mtx;
    
    void Foo()
    {
        boost::lock_guard<boost::recursive_mutex> lock(mtx);
        if (...) 
        {
           Foo();
        }
    }
    

    The documentation can be found here.

    Note that Boost defines a number of different mutex types. Because your example shows the lock being taken recursively, we need to use at least boost::recursive_mutex.

    There are also different types of locks. In particular, if you want a reader-writer lock (so that multiple readers can hold the lock simultaneously, as long as no writer has the lock), you can use boost::shared_lock instead of lock_guard.

    0 讨论(0)
  • 2021-01-17 16:18

    With boost you can use boost::lock_guard<> class:

    class test
    {
    public:
     void testMethod()
     {
      // this section is not locked
      {
       boost::lock_guard<boost::recursive_mutex> lock(m_guard);
       // this section is locked
      }
      // this section is not locked
     }
    private:
        boost::recursive_mutex m_guard;
    };
    

    PS These classes located in Boost.Thread library.

    0 讨论(0)
提交回复
热议问题