diff options
Diffstat (limited to 'tcl8.6/pkgs/thread2.8.4/doc/man/tsv.n')
-rw-r--r-- | tcl8.6/pkgs/thread2.8.4/doc/man/tsv.n | 628 |
1 files changed, 0 insertions, 628 deletions
diff --git a/tcl8.6/pkgs/thread2.8.4/doc/man/tsv.n b/tcl8.6/pkgs/thread2.8.4/doc/man/tsv.n deleted file mode 100644 index 386e904..0000000 --- a/tcl8.6/pkgs/thread2.8.4/doc/man/tsv.n +++ /dev/null @@ -1,628 +0,0 @@ -'\" -'\" Generated from file '' by tcllib/doctools with format 'nroff' -'\" -.TH "tsv" n 2\&.8 "Tcl Threading" -.\" The -*- nroff -*- definitions below are for supplemental macros used -.\" in Tcl/Tk manual entries. -.\" -.\" .AP type name in/out ?indent? -.\" Start paragraph describing an argument to a library procedure. -.\" type is type of argument (int, etc.), in/out is either "in", "out", -.\" or "in/out" to describe whether procedure reads or modifies arg, -.\" and indent is equivalent to second arg of .IP (shouldn't ever be -.\" needed; use .AS below instead) -.\" -.\" .AS ?type? ?name? -.\" Give maximum sizes of arguments for setting tab stops. Type and -.\" name are examples of largest possible arguments that will be passed -.\" to .AP later. If args are omitted, default tab stops are used. -.\" -.\" .BS -.\" Start box enclosure. From here until next .BE, everything will be -.\" enclosed in one large box. -.\" -.\" .BE -.\" End of box enclosure. -.\" -.\" .CS -.\" Begin code excerpt. -.\" -.\" .CE -.\" End code excerpt. -.\" -.\" .VS ?version? ?br? -.\" Begin vertical sidebar, for use in marking newly-changed parts -.\" of man pages. The first argument is ignored and used for recording -.\" the version when the .VS was added, so that the sidebars can be -.\" found and removed when they reach a certain age. If another argument -.\" is present, then a line break is forced before starting the sidebar. -.\" -.\" .VE -.\" End of vertical sidebar. -.\" -.\" .DS -.\" Begin an indented unfilled display. -.\" -.\" .DE -.\" End of indented unfilled display. -.\" -.\" .SO ?manpage? -.\" Start of list of standard options for a Tk widget. The manpage -.\" argument defines where to look up the standard options; if -.\" omitted, defaults to "options". The options follow on successive -.\" lines, in three columns separated by tabs. -.\" -.\" .SE -.\" End of list of standard options for a Tk widget. -.\" -.\" .OP cmdName dbName dbClass -.\" Start of description of a specific option. cmdName gives the -.\" option's name as specified in the class command, dbName gives -.\" the option's name in the option database, and dbClass gives -.\" the option's class in the option database. -.\" -.\" .UL arg1 arg2 -.\" Print arg1 underlined, then print arg2 normally. -.\" -.\" .QW arg1 ?arg2? -.\" Print arg1 in quotes, then arg2 normally (for trailing punctuation). -.\" -.\" .PQ arg1 ?arg2? -.\" Print an open parenthesis, arg1 in quotes, then arg2 normally -.\" (for trailing punctuation) and then a closing parenthesis. -.\" -.\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages. -.if t .wh -1.3i ^B -.nr ^l \n(.l -.ad b -.\" # Start an argument description -.de AP -.ie !"\\$4"" .TP \\$4 -.el \{\ -. ie !"\\$2"" .TP \\n()Cu -. el .TP 15 -.\} -.ta \\n()Au \\n()Bu -.ie !"\\$3"" \{\ -\&\\$1 \\fI\\$2\\fP (\\$3) -.\".b -.\} -.el \{\ -.br -.ie !"\\$2"" \{\ -\&\\$1 \\fI\\$2\\fP -.\} -.el \{\ -\&\\fI\\$1\\fP -.\} -.\} -.. -.\" # define tabbing values for .AP -.de AS -.nr )A 10n -.if !"\\$1"" .nr )A \\w'\\$1'u+3n -.nr )B \\n()Au+15n -.\" -.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n -.nr )C \\n()Bu+\\w'(in/out)'u+2n -.. -.AS Tcl_Interp Tcl_CreateInterp in/out -.\" # BS - start boxed text -.\" # ^y = starting y location -.\" # ^b = 1 -.de BS -.br -.mk ^y -.nr ^b 1u -.if n .nf -.if n .ti 0 -.if n \l'\\n(.lu\(ul' -.if n .fi -.. -.\" # BE - end boxed text (draw box now) -.de BE -.nf -.ti 0 -.mk ^t -.ie n \l'\\n(^lu\(ul' -.el \{\ -.\" Draw four-sided box normally, but don't draw top of -.\" box if the box started on an earlier page. -.ie !\\n(^b-1 \{\ -\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' -.\} -.el \}\ -\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' -.\} -.\} -.fi -.br -.nr ^b 0 -.. -.\" # VS - start vertical sidebar -.\" # ^Y = starting y location -.\" # ^v = 1 (for troff; for nroff this doesn't matter) -.de VS -.if !"\\$2"" .br -.mk ^Y -.ie n 'mc \s12\(br\s0 -.el .nr ^v 1u -.. -.\" # VE - end of vertical sidebar -.de VE -.ie n 'mc -.el \{\ -.ev 2 -.nf -.ti 0 -.mk ^t -\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n' -.sp -1 -.fi -.ev -.\} -.nr ^v 0 -.. -.\" # Special macro to handle page bottom: finish off current -.\" # box/sidebar if in box/sidebar mode, then invoked standard -.\" # page bottom macro. -.de ^B -.ev 2 -'ti 0 -'nf -.mk ^t -.if \\n(^b \{\ -.\" Draw three-sided box if this is the box's first page, -.\" draw two sides but no top otherwise. -.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c -.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c -.\} -.if \\n(^v \{\ -.nr ^x \\n(^tu+1v-\\n(^Yu -\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c -.\} -.bp -'fi -.ev -.if \\n(^b \{\ -.mk ^y -.nr ^b 2 -.\} -.if \\n(^v \{\ -.mk ^Y -.\} -.. -.\" # DS - begin display -.de DS -.RS -.nf -.sp -.. -.\" # DE - end display -.de DE -.fi -.RE -.sp -.. -.\" # SO - start of list of standard options -.de SO -'ie '\\$1'' .ds So \\fBoptions\\fR -'el .ds So \\fB\\$1\\fR -.SH "STANDARD OPTIONS" -.LP -.nf -.ta 5.5c 11c -.ft B -.. -.\" # SE - end of list of standard options -.de SE -.fi -.ft R -.LP -See the \\*(So manual entry for details on the standard options. -.. -.\" # OP - start of full description for a single option -.de OP -.LP -.nf -.ta 4c -Command-Line Name: \\fB\\$1\\fR -Database Name: \\fB\\$2\\fR -Database Class: \\fB\\$3\\fR -.fi -.IP -.. -.\" # CS - begin code excerpt -.de CS -.RS -.nf -.ta .25i .5i .75i 1i -.. -.\" # CE - end code excerpt -.de CE -.fi -.RE -.. -.\" # UL - underline word -.de UL -\\$1\l'|0\(ul'\\$2 -.. -.\" # QW - apply quotation marks to word -.de QW -.ie '\\*(lq'"' ``\\$1''\\$2 -.\"" fix emacs highlighting -.el \\*(lq\\$1\\*(rq\\$2 -.. -.\" # PQ - apply parens and quotation marks to word -.de PQ -.ie '\\*(lq'"' (``\\$1''\\$2)\\$3 -.\"" fix emacs highlighting -.el (\\*(lq\\$1\\*(rq\\$2)\\$3 -.. -.\" # QR - quoted range -.de QR -.ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3 -.\"" fix emacs highlighting -.el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3 -.. -.\" # MT - "empty" string -.de MT -.QW "" -.. -.BS -.SH NAME -tsv \- Part of the Tcl threading extension allowing script level manipulation of data shared between threads\&. -.SH SYNOPSIS -package require \fBTcl 8\&.4\fR -.sp -package require \fBThread ?2\&.8?\fR -.sp -\fBtsv::names\fR ?pattern? -.sp -\fBtsv::object\fR \fIvarname\fR \fIelement\fR -.sp -\fBtsv::set\fR \fIvarname\fR \fIelement\fR ?value? -.sp -\fBtsv::get\fR \fIvarname\fR \fIelement\fR ?namedvar? -.sp -\fBtsv::unset\fR \fIvarname\fR ?element? -.sp -\fBtsv::exists\fR \fIvarname\fR \fIelement\fR -.sp -\fBtsv::pop\fR \fIvarname\fR \fIelement\fR -.sp -\fBtsv::move\fR \fIvarname\fR \fIoldname\fR \fInewname\fR -.sp -\fBtsv::incr\fR \fIvarname\fR \fIelement\fR ?count? -.sp -\fBtsv::append\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value \&.\&.\&.? -.sp -\fBtsv::lock\fR \fIvarname\fR \fIarg\fR ?arg \&.\&.\&.? -.sp -\fBtsv::handlers\fR -.sp -\fBtsv::lappend\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value \&.\&.\&.? -.sp -\fBtsv::linsert\fR \fIvarname\fR \fIelement\fR \fIindex\fR \fIvalue\fR ?value \&.\&.\&.? -.sp -\fBtsv::lreplace\fR \fIvarname\fR \fIelement\fR \fIfirst\fR \fIlast\fR ?value \&.\&.\&.? -.sp -\fBtsv::llength\fR \fIvarname\fR \fIelement\fR -.sp -\fBtsv::lindex\fR \fIvarname\fR \fIelement\fR ?index? -.sp -\fBtsv::lrange\fR \fIvarname\fR \fIelement\fR \fIfrom\fR \fIto\fR -.sp -\fBtsv::lsearch\fR \fIvarname\fR \fIelement\fR ?options? \fIpattern\fR -.sp -\fBtsv::lset\fR \fIvarname\fR \fIelement\fR \fIindex\fR ?index \&.\&.\&.? \fIvalue\fR -.sp -\fBtsv::lpop\fR \fIvarname\fR \fIelement\fR ?index? -.sp -\fBtsv::lpush\fR \fIvarname\fR \fIelement\fR ?index? -.sp -\fBtsv::array set\fR \fIvarname\fR \fIlist\fR -.sp -\fBtsv::array get\fR \fIvarname\fR ?pattern? -.sp -\fBtsv::array names\fR \fIvarname\fR ?pattern? -.sp -\fBtsv::array size\fR \fIvarname\fR -.sp -\fBtsv::array reset\fR \fIvarname\fR \fIlist\fR -.sp -\fBtsv::array bind\fR \fIvarname\fR \fIhandle\fR -.sp -\fBtsv::array unbind\fR \fIvarname\fR -.sp -\fBtsv::array isbound\fR \fIvarname\fR -.sp -\fBtsv::keyldel\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR -.sp -\fBtsv::keylget\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR ?retvar? -.sp -\fBtsv::keylkeys\fR \fIvarname\fR \fIkeylist\fR ?key? -.sp -\fBtsv::keylset\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR \fIvalue\fR ?key value\&.\&.? -.sp -.BE -.SH DESCRIPTION -This section describes commands implementing thread shared variables\&. -A thread shared variable is very similar to a Tcl array but in -contrast to a Tcl array it is created in shared memory and can -be accessed from many threads at the same time\&. Important feature of -thread shared variable is that each access to the variable is internaly -protected by a mutex so script programmer does not have to take care -about locking the variable himself\&. -.PP -Thread shared variables are not bound to any thread explicitly\&. That -means that when a thread which created any of thread shared variables -exits, the variable and associated memory is not unset/reclaimed\&. -User has to explicitly unset the variable to reclaim the memory -consumed by the variable\&. -.SH "ELEMENT COMMANDS" -.TP -\fBtsv::names\fR ?pattern? -Returns names of shared variables matching optional ?pattern? -or all known variables if pattern is ommited\&. -.TP -\fBtsv::object\fR \fIvarname\fR \fIelement\fR -Creates object accessor command for the \fIelement\fR in the -shared variable \fIvarname\fR\&. Using this command, one can apply most -of the other shared variable commands as method functions of -the element object command\&. The object command is automatically -deleted when the element which this command is pointing to is unset\&. -.CS - - - % tsv::set foo bar "A shared string" - % set string [tsv::object foo bar] - % $string append " appended" - => A shared string appended - -.CE -.TP -\fBtsv::set\fR \fIvarname\fR \fIelement\fR ?value? -Sets the value of the \fIelement\fR in the shared variable \fIvarname\fR -to \fIvalue\fR and returns the value to caller\&. The \fIvalue\fR -may be ommited, in which case the command will return the current -value of the element\&. If the element cannot be found, error is triggered\&. -.TP -\fBtsv::get\fR \fIvarname\fR \fIelement\fR ?namedvar? -Retrieves the value of the \fIelement\fR from the shared variable \fIvarname\fR\&. -If the optional argument \fInamedvar\fR is given, the value is -stored in the named variable\&. Return value of the command depends -of the existence of the optional argument \fInamedvar\fR\&. -If the argument is ommited and the requested element cannot be found -in the shared array, the command triggers error\&. If, however, the -optional argument is given on the command line, the command returns -true (1) if the element is found or false (0) if the element is not found\&. -.TP -\fBtsv::unset\fR \fIvarname\fR ?element? -Unsets the \fIelement\fR from the shared variable \fIvarname\fR\&. -If the optional element is not given, it deletes the variable\&. -.TP -\fBtsv::exists\fR \fIvarname\fR \fIelement\fR -Checks wether the \fIelement\fR exists in the shared variable \fIvarname\fR -and returns true (1) if it does or false (0) if it doesn't\&. -.TP -\fBtsv::pop\fR \fIvarname\fR \fIelement\fR -Returns value of the \fIelement\fR in the shared variable \fIvarname\fR -and unsets the element, all in one atomic operation\&. -.TP -\fBtsv::move\fR \fIvarname\fR \fIoldname\fR \fInewname\fR -Renames the element \fIoldname\fR to the \fInewname\fR in the -shared variable \fIvarname\fR\&. This effectively performs an get/unset/set -sequence of operations but all in one atomic step\&. -.TP -\fBtsv::incr\fR \fIvarname\fR \fIelement\fR ?count? -Similar to standard Tcl \fBincr\fR command but increments the value -of the \fIelement\fR in shared variaboe \fIvarname\fR instead of -the Tcl variable\&. -.TP -\fBtsv::append\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value \&.\&.\&.? -Similar to standard Tcl \fBappend\fR command but appends one or more -values to the \fIelement\fR in shared variable \fIvarname\fR instead of the -Tcl variable\&. -.TP -\fBtsv::lock\fR \fIvarname\fR \fIarg\fR ?arg \&.\&.\&.? -This command concatenates passed arguments and evaluates the -resulting script under the internal mutex protection\&. During the -script evaluation, the entire shared variable is locked\&. For shared -variable commands within the script, internal locking is disabled -so no deadlock can occur\&. It is also allowed to unset the shared -variable from within the script\&. The shared variable is automatically -created if it did not exists at the time of the first lock operation\&. -.CS - - - % tsv::lock foo { - tsv::lappend foo bar 1 - tsv::lappend foo bar 2 - puts stderr [tsv::set foo bar] - tsv::unset foo - } - -.CE -.TP -\fBtsv::handlers\fR -Returns the names of all persistent storage handlers enabled at compile time\&. -See \fBARRAY COMMANDS\fR for details\&. -.PP -.SH "LIST COMMANDS" -Those command are similar to the equivalently named Tcl command\&. The difference -is that they operate on elements of shared arrays\&. -.TP -\fBtsv::lappend\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value \&.\&.\&.? -Similar to standard Tcl \fBlappend\fR command but appends one -or more values to the \fIelement\fR in shared variable \fIvarname\fR -instead of the Tcl variable\&. -.TP -\fBtsv::linsert\fR \fIvarname\fR \fIelement\fR \fIindex\fR \fIvalue\fR ?value \&.\&.\&.? -Similar to standard Tcl \fBlinsert\fR command but inserts one -or more values at the \fIindex\fR list position in the -\fIelement\fR in the shared variable \fIvarname\fR instead of the Tcl variable\&. -.TP -\fBtsv::lreplace\fR \fIvarname\fR \fIelement\fR \fIfirst\fR \fIlast\fR ?value \&.\&.\&.? -Similar to standard Tcl \fBlreplace\fR command but replaces one -or more values between the \fIfirst\fR and \fIlast\fR position -in the \fIelement\fR of the shared variable \fIvarname\fR instead of -the Tcl variable\&. -.TP -\fBtsv::llength\fR \fIvarname\fR \fIelement\fR -Similar to standard Tcl \fBllength\fR command but returns length -of the \fIelement\fR in the shared variable \fIvarname\fR instead of the Tcl -variable\&. -.TP -\fBtsv::lindex\fR \fIvarname\fR \fIelement\fR ?index? -Similar to standard Tcl \fBlindex\fR command but returns the value -at the \fIindex\fR list position of the \fIelement\fR from -the shared variable \fIvarname\fR instead of the Tcl variable\&. -.TP -\fBtsv::lrange\fR \fIvarname\fR \fIelement\fR \fIfrom\fR \fIto\fR -Similar to standard Tcl \fBlrange\fR command but returns values -between \fIfrom\fR and \fIto\fR list positions from the -\fIelement\fR in the shared variable \fIvarname\fR instead of the Tcl variable\&. -.TP -\fBtsv::lsearch\fR \fIvarname\fR \fIelement\fR ?options? \fIpattern\fR -Similar to standard Tcl \fBlsearch\fR command but searches the \fIelement\fR -in the shared variable \fIvarname\fR instead of the Tcl variable\&. -.TP -\fBtsv::lset\fR \fIvarname\fR \fIelement\fR \fIindex\fR ?index \&.\&.\&.? \fIvalue\fR -Similar to standard Tcl \fBlset\fR command but sets the \fIelement\fR -in the shared variable \fIvarname\fR instead of the Tcl variable\&. -.TP -\fBtsv::lpop\fR \fIvarname\fR \fIelement\fR ?index? -Similar to the standard Tcl \fBlindex\fR command but in addition to -returning, it also splices the value out of the \fIelement\fR -from the shared variable \fIvarname\fR in one atomic operation\&. -In contrast to the Tcl \fBlindex\fR command, this command returns -no value to the caller\&. -.TP -\fBtsv::lpush\fR \fIvarname\fR \fIelement\fR ?index? -This command performes the opposite of the \fBtsv::lpop\fR command\&. -As its counterpart, it returns no value to the caller\&. -.PP -.SH "ARRAY COMMANDS" -This command supports most of the options of the standard Tcl -\fBarray\fR command\&. In addition to those, it allows binding -a shared variable to some persisten storage databases\&. Currently the persistent -options supported are the famous GNU Gdbm and LMDB\&. These options have to be -selected during the package compilation time\&. -The implementation provides hooks for defining other persistency layers, if -needed\&. -.TP -\fBtsv::array set\fR \fIvarname\fR \fIlist\fR -Does the same as standard Tcl \fBarray set\fR\&. -.TP -\fBtsv::array get\fR \fIvarname\fR ?pattern? -Does the same as standard Tcl \fBarray get\fR\&. -.TP -\fBtsv::array names\fR \fIvarname\fR ?pattern? -Does the same as standard Tcl \fBarray names\fR\&. -.TP -\fBtsv::array size\fR \fIvarname\fR -Does the same as standard Tcl \fBarray size\fR\&. -.TP -\fBtsv::array reset\fR \fIvarname\fR \fIlist\fR -Does the same as standard Tcl \fBarray set\fR but it clears -the \fIvarname\fR and sets new values from the list atomically\&. -.TP -\fBtsv::array bind\fR \fIvarname\fR \fIhandle\fR -Binds the \fIvarname\fR to the persistent storage \fIhandle\fR\&. -The format of the \fIhandle\fR is <handler>:<address>, where <handler> is -"gdbm" for GNU Gdbm and "lmdb" for LMDB and <address> is the path to the -database file\&. -.TP -\fBtsv::array unbind\fR \fIvarname\fR -Unbinds the shared \fIarray\fR from its bound persistent storage\&. -.TP -\fBtsv::array isbound\fR \fIvarname\fR -Returns true (1) if the shared \fIvarname\fR is bound to some -persistent storage or zero (0) if not\&. -.PP -.SH "KEYED LIST COMMANDS" -Keyed list commands are borrowed from the TclX package\&. Keyed lists provide -a structured data type built upon standard Tcl lists\&. This is a functionality -similar to structs in the C programming language\&. -.PP -A keyed list is a list in which each element contains a key and value -pair\&. These element pairs are stored as lists themselves, where the key -is the first element of the list, and the value is the second\&. The -key-value pairs are referred to as fields\&. This is an example of a -keyed list: -.CS - - - {{NAME {Frank Zappa}} {JOB {musician and composer}}} - -.CE -Fields may contain subfields; `\&.' is the separator character\&. Subfields -are actually fields where the value is another keyed list\&. Thus the -following list has the top level fields ID and NAME, and subfields -NAME\&.FIRST and NAME\&.LAST: -.CS - - - {ID 106} {NAME {{FIRST Frank} {LAST Zappa}}} - -.CE -There is no limit to the recursive depth of subfields, -allowing one to build complex data structures\&. Keyed lists are constructed -and accessed via a number of commands\&. All keyed list management -commands take the name of the variable containing the keyed list as an -argument (i\&.e\&. passed by reference), rather than passing the list directly\&. -.TP -\fBtsv::keyldel\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR -Delete the field specified by \fIkey\fR from the keyed list \fIkeylist\fR -in the shared variable \fIvarname\fR\&. -This removes both the key and the value from the keyed list\&. -.TP -\fBtsv::keylget\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR ?retvar? -Return the value associated with \fIkey\fR from the keyed list \fIkeylist\fR -in the shared variable \fIvarname\fR\&. -If the optional \fIretvar\fR is not specified, then the value will be -returned as the result of the command\&. In this case, if key is not found -in the list, an error will result\&. -.sp -If \fIretvar\fR is specified and \fIkey\fR is in the list, then the value -is returned in the variable \fIretvar\fR and the command returns 1 if the -key was present within the list\&. If \fIkey\fR isn't in the list, the -command will return 0, and \fIretvar\fR will be left unchanged\&. If {} is -specified for \fIretvar\fR, the value is not returned, allowing the Tcl -programmer to determine if a \fIkey\fR is present in a keyed list without -setting a variable as a side-effect\&. -.TP -\fBtsv::keylkeys\fR \fIvarname\fR \fIkeylist\fR ?key? -Return the a list of the keys in the keyed list \fIkeylist\fR in the -shared variable \fIvarname\fR\&. If \fIkey\fR is specified, then it is -the name of a key field who's subfield keys are to be retrieved\&. -.TP -\fBtsv::keylset\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR \fIvalue\fR ?key value\&.\&.? -Set the value associated with \fIkey\fR, in the keyed list \fIkeylist\fR -to \fIvalue\fR\&. If the \fIkeylist\fR does not exists, it is created\&. -If \fIkey\fR is not currently in the list, it will be added\&. If it already -exists, \fIvalue\fR replaces the existing value\&. Multiple keywords and -values may be specified, if desired\&. -.PP -.SH DISCUSSION -The current implementation of thread shared variables allows for easy and -convenient access to data shared between different threads\&. -Internally, the data is stored in Tcl objects and all package commands -operate on internal data representation, thus minimizing shimmering and -improving performance\&. Special care has been taken to assure that all -object data is properly locked and deep-copied when moving objects between -threads\&. -.PP -Due to the internal design of the Tcl core, there is no provision of full -integration of shared variables within the Tcl syntax, unfortunately\&. All -access to shared data must be performed with the supplied package commands\&. -Also, variable traces are not supported\&. But even so, benefits of easy, -simple and safe shared data manipulation outweights imposed limitations\&. -.SH CREDITS -Thread shared variables are inspired by the nsv interface found in -AOLserver, a highly scalable Web server from America Online\&. -.SH "SEE ALSO" -thread, tpool, ttrace -.SH KEYWORDS -locking, synchronization, thread shared data, threads |