NaviServer - programmable web server

[ Main Table Of Contents | Table Of Contents | Keyword Index ]

ns_critsec(n) 4.99.19 naviserver "NaviServer Built-in Commands"

Name

ns_critsec - Operate on critical section objects

Table Of Contents

Synopsis

Description

This command provides a mechanism to manipulate critical section objects.

COMMANDS

ns_critsec option ?arg arg ...?
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 eval object script

Evaluate the provided script inside of 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

Keywords

mutex, server built-in, thread