NaviServer - programmable web server
4.99  5.0

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

ns_critsec(n) 4.99.30 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