Tuesday, May 12, 2009

recursive lock; test a thread already holds this lock

(Importance and value -- I feel most non-library developer don't need to this knowledge.)

java lets you test whether an arbitrary thread already holds a given lock. myThread.holdsLock(), but let's explore it for c++.

In both java and boost thread, there's an object (a "poor handle") linked to the real world thread. There's a one-to-one mapping between the handle and the real thread. I believe the thread library (not "the OS") gives you a pointer to the real thread. Java or pthread builds an object around that pointer. This pointer is the key to determining if a thread already hold a given lock. P177[[pthreads]] shows pthreads api does provide a TID data structure. Typically an integer. Win32 offers 2 data structures --
- a kernel-level global thread id
- thread handle local to an OS process, so this handle is meaningless to another process. See post on user-kernel thread mapping.

Boost offers thread::native_handle() and thread::get_id()

--http://tutorials.jenkov.com/java-concurrency/locks.html --
shows simple java code of a re-entrant lock and non-re-entrant lock.

--http://www.hdfgroup.org/HDF5/doc/TechNotes/ThreadSafeLibrary.html --
Our implementation of recursive locks is built on top of a pthread mutex lock (which is --not--recursive--). It makes use of a pthread condition variable to have unsuccessful threads wait on the mutex. Waiting threads are awaken by a signal from the final unlock.

--http://askldjd.wordpress.com/2009/10/26/prefer-simple-mutex-over-recursive-mutex/--
mutexes are recursive by default in Windows.

--http://www.pdc.kth.se/training/Talks/C++/boost/libs/thread/doc/mutex_concept.html--
Internally a lock count[3] is maintained and the owning thread must unlock the mutex model the same number of times that it's locked it before the mutex object's state returns to unlocked. Since mutex objects in Boost.Threads expose locking functionality only through lock concepts, a thread will always unlock a mutex object the same number of times that it locked it.

[3]Conceptually, I feel a counting semaphore can be used.

--http://groups.google.com/group/comp.programming.threads/msg/d835f2f6ef8aed99?hl=en--
is a more detailed discussion of recursive mutex

No comments:

Total Pageviews

my favorite topics (labels)

_fuxi (302) _misLabel (13) _orig? (3) _rm (2) _vague (2) clarified (58) cpp (39) cpp_const (22) cpp_real (76) cpp/java/c# (101) cppBig4 (54) cppSmartPtr (35) cppSTL (33) cppSTL_itr (27) cppSTL_real (26) cppTemplate (28) creditMkt (14) db (65) db_sybase (43) deepUnder (31) dotnet (20) ECN (27) econ/bank` (36) fin/sys_misc (43) finGreek (34) finReal (45) finRisk (30) finTechDesign (46) finTechMisc (32) finVol (66) FixedIncom (28) fMath (7) fMathOption (33) fMathStoch (67) forex (39) gr8IV_Q (46) GTD_skill (15) GUI_event (30) inMemDB (42) intuit_math (41) intuitFinance (57) javaMisc (68) javaServerSide (13) lambda/delegate (22) marketData (28) math (10) mathStat (55) memIssue (8) memMgmt (66) metaProgram` (6) OO_Design (84) original_content (749) polymorphic/vptr (40) productive (21) ptr/ref (48) py (28) reflect (8) script`/unix (82) socket/stream (39) subquery/join (30) subvert (13) swing/wpf (9) sysProgram` (16) thread (164) thread_CAS (15) thread_cpp (28) Thread* (22) timeSaver (80) transactional (23) tune (24) tuneDB (40) tuneLatency (30) z_ajax (9) z_algoDataStruct (41) z_arch (26) z_arch_job (27) z_automateTest (17) z_autoTrad` (19) z_bestPractice (39) z_bold (83) z_bondMath (35) z_book (18) z_boost (19) z_byRef^Val (32) z_c#GUI (43) z_c#misc (80) z_cast/convert (28) z_container (67) z_cStr/arr (39) z_Favorite* (8) z_FIX (15) z_forex (48) z_fwd_Deal (18) z_gz=job (33) z_gzBig20 (13) z_gzMgr (13) z_gzPain (20) z_gzThreat (19) z_hib (19) z_IDE (52) z_ikm (5) z_IR_misc (36) z_IRS (26) z_javaWeb (28) z_jdbc (10) z_jobFinTech (46) z_jobHunt (20) z_jobRealXp (10) z_jobStrength (15) z_jobUS^asia (27) z_letter (42) z_linq (10) z_memberHid` (11) z_MOM (54) z_nestedClass (5) z_oq (24) z_PCP (12) z_pearl (1) z_php (20) z_prodSupport (7) z_py (31) z_quant (14) z_regex (8) z_rv (38) z_skillist (48) z_slic`Problem (6) z_SOA (14) z_spring (25) z_src_code (8) z_swingMisc (50) z_swingTable (26) z_unpublish (2) z_VBA/Excel (8) z_windoz (17) z_wpfCommand (9)

About Me

New York (Time Square), NY, United States
http://www.linkedin.com/in/tanbin