2017-03-29 4 views
0

TSVでdict型変数を共有したいのですが、TSVのドキュメントにはDICTのサポートが表示されません。スレッドを通じてDICT変数を共有する別の方法がありますか?Tcl TSVサポートの渡し辞書

答えて

1

TSV sub-packageには特別なサポートはありません。あなたは通常、そのようなことのためにtsv::arrayを使用します。しかし、値をロック内の文字列として取り込み、辞書として処理し、結果を書き戻すこともできます。多くの点で

# assuming that the main thread shared variable is called FOO and we're using the BAR element of it 
tsv::lock FOO { 
    # Read the dictionary out 
    set mycopy [tsv::get FOO BAR] 
    # Do some complicated operation 
    dict set mycopy "grill" [expr {2**[dict get $mycopy "quux"]}] 
    # Write the updated dictionary back 
    tsv::set FOO BAR $mycopy 
} 

ラッパーがあなたのためにCで書かれている以外、tsv::lappendなどのリストベースのコマンドは、むしろ、そのような基本的なget/setパターンのラッパーです。 (TSVサブパッケージはかなり古くなっています - それが提供するAPIは、Tcl 8.4と同様の最終更新日を持つと思うし、辞書のための特定の操作を提供しません)。

+1

TSVでのキー付きリストのサポートそれらは辞書と構文的に異なりますが、同様の基本操作を提供します。 (私は最初の 'dict'実装を行うときにその構文を使用することを考えましたが、代わりに他のことを可能にしたためではありませんでした。) –

+0

答えに感謝します。これは、TSVがマスターとワーカースレッド間で参照データを共有する正しい方法ではないことを意味しますか?それを行う良い方法はありますか? – Jonjilla

関連する問題