Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a difference between Boost's scoped mutex and WinAPi's critical section?

In Windows environment, is Boost's scoped mutex using WinAPI's critical sections, or something else?

like image 355
nhaa123 Avatar asked May 18 '09 12:05

nhaa123


2 Answers

The current version of boost::mutex uses neither a Win32 CRITICAL_SECTION, nor a Win32 Mutex. Instead, it uses atomic operations and a Win32 Event for blocking waits.

Older versions (boost 1.34.1 and prior) were a wrapper around CRITICAL_SECTION on Windows.

Incidentally, the mutex itself is not scoped. The boost::mutex::scoped_lock type and, in recent versions, boost::lock_guard<boost::mutex> and boost::unique_lock<boost::mutex> provide RAII wrappers for locking a mutex to ensure you don't forget to unlock it.

The boost::lock_guard<> and boost::unique_lock<> templates work with any type with lock() and unlock() member functions, so you can use them with inter-process mutexes if desired.

like image 180
Anthony Williams Avatar answered Sep 19 '22 14:09

Anthony Williams


Win32's CRITICAL_SECTION can only be used among the threads of a single process. If you need to use something between processes, you need a mutex. Boost says nothing about critical sections so I would assume it is using mutexes.

"scoped" just means it has a wrapper that uses RAII to automatically unlock the mutex at the end of a particular scope.

like image 45
Jason S Avatar answered Sep 20 '22 14:09

Jason S