ns_critsec - Operate on critical section objects
This command provides a mechanism to manipulate critical section objects.
Initializes a new critical section object and returns a handle to it.
Destroys the critical section object and frees any resources it was using.
Enters the critical section. The thread will block if another thread is already in the critical section.
Evaluate the provided script inside of 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.
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 }