Difference between revisions of "Ns critsec"

From AOLserver Wiki
Jump to navigation Jump to search
(Added multiple sequential calls to ns_critsec enter to the example)
m
 
Line 23: Line 23:
  
 
: Enters the critical section.  The thread will block if another thread is already in the critical section.
 
: Enters the critical section.  The thread will block if another thread is already in the critical section.
* '''ns_critsec leaves''' ''object''
+
* '''ns_critsec leave''' ''object''
  
 
: Leaves the critical section.  When the thread leaves the critical section as many times as it has entered, a notification will be sent to other threads that are waiting on the critical section.
 
: Leaves the critical section.  When the thread leaves the critical section as many times as it has entered, a notification will be sent to other threads that are waiting on the critical section.

Latest revision as of 15:39, 29 August 2008

Man page: http://aolserver.com/docs/tcl/ns_critsec.html


NAME

ns_critsec - Operate on critical section objects

SYNOPSIS

ns_critsec option ?arg arg ...?

DESCRIPTION

This command provides a mechanism to manipulate critical section objects. The legal options (which may be abbreviated) are:
  • ns_critsec create
Initializes a new critical section object and returns a handle to it.
  • ns_critsec destroy object
Destroys the critical section object and frees any resources it was using.
  • ns_critsec enter object
Enters the critical section. The thread will block if another thread is already in the critical section.
  • ns_critsec leave object
Leaves the critical section. When the thread leaves the critical section as many times as it has entered, a notification will be sent to other threads that are waiting on the critical section.

EXAMPLES

Is this the right way to use this command? The example is contrived, but I wanted to call ns_critsec multiple times.

   # If a thread is executing any of these procs, no other
   # thread can execute any of these procs until the first
   # thread has completely finished.
   
   nsv_set . special_file_critsec [ns_critsec create]
   
   proc write_special_file {data} {
       set critsec [nsv_get . special_file_critsec]
       ns_critsec enter $critsec
       set handle [open special_file w]
       puts $handle $data
       close $handle
       ns_critsec leave $critsec
   }
   
   proc read_special_file {} {
       set critsec [nsv_get . special_file_critsec]
       ns_critsec enter $critsec
       set handle [open special_file r]
       set result [read $handle]
       close $handle
       ns_critsec leave $critsec
       return $result
   }
   
   proc change_special_file {data} {
       set critsec [nsv_get . special_file_critsec]
       ns_critsec enter $critsec
       set result [read_special_file]
       write_special_file $data
       ns_critsec leave $critsec
       return $result
   }

SEE ALSO

ns_cond, ns_event, ns_mutex, ns_thread

Category Documentation - Category Core Tcl API