[ Table Of Contents | Keyword Index ]

ns_critsec(n) 4.99 "NaviServer Built-in Commands"

NAME

ns_critsec - Operate on critical section objects

TABLE OF CONTENTS

    TABLE OF CONTENTS
    SYNOPSIS
    DESCRIPTION
    COMMANDS
    EXAMPLES
    KEYWORDS

SYNOPSIS

ns_critsec option ?arg arg ...?
ns_critsec create
ns_critsec destroy object
ns_critsec enter object
ns_critsec leaves object

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 leaves 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
   }

KEYWORDS

ns_cond , ns_event , ns_mutex , ns_thread , nsd