
On Fri, 09 Jun 2006 22:51:48 -0300, Peteris Krumins [Newsgroups]
Hello!
I am using a library which itself internally does not use any thread sync mechanisms but it provides callback functions lib_lock() and lib_unlock() which I can specify if the lib is used in multithread environment. lib_lock() would get called before critical segment and after it lib_unlock() would get called.
I read Boost.Thread documentation and I understand that lock concept is not thread-safe itself and should be used only at block scope. This makes me think that I have no way to use locking provided by Boost to acquire a lock in lib_lock() function and release it in lib_unlock()? But I am not sure.
Do you have any suggestions if this can be done using Boost?
You can protext the lock with another, short-lived, lock: mutex m1; mutex m2; mutex::lock g_lk(m2, false); lib_lock() { mutex::lock lk(m1); g_lk.lock(); } lib_unlock() { mutex::lock lk(m1); g_lk.unlock(); } This isn't 100% OK because the lock is used from different threads, but should work. In any case, you can write a mutex with the monitor pattern, but that's even uglier. You should bug the Boost.Threads maintainers for a member::unsafe_lock() method. Bruno