Boost.Thread locking across two functions

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? Thanks! P.Krumins

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

Le Sat, 10 Jun 2006 00:51:28 -0300, Bruno Martínez a écrit :
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.
As I'm new myself to MT programming, why isn't this 100% OK? I can't see how it could fail. Curiously, Nowhere man -- nowhere.man@levallois.eu.org OpenPGP 0xD9D50D8A
participants (3)
-
Bruno Martínez
-
Peteris Krumins [Newsgroups]
-
Pierre THIERRY