#author("2023-09-14T00:52:36+09:00","","")
#author("2023-09-16T11:31:45+09:00","","")
#topicpath

////////////////////////////////////////////////////////////////////////////////
* 目次 [#p691c381]
#contents();

////////////////////////////////////////////////////////////////////////////////
* Thread [#w8ff014e]

//==============================================================================
** thread の生成 [#vb28c0fa]
- threads を使う。
 use threads;
 
 # thread の生成
 # スレッド関数を new の第1引数に、スレッド関数に渡す引数を第2引数以降に指定する。
 my ($thread_1) = threads->new(\&thread_func, "t1");
 
 # thread 終了の待ち合わせ
 $thread_1->join;
 
 # thread 関数
 sub thread_func {
     # 処理
 }


//==============================================================================
** queue による通信 [#lee56779]
- Thread::Queue を使う。

 use threads;
 use Thread::Queue;
 
 my ($queue_a) = new Thread::Queue;
 
 # thread 生成時に、 thread 関数の引数として Queue を渡す:
 my ($thread_a) = threads->new(\&thread_func_a, $queue_a);
 
 $thread_a->join;
- Queue に積む
 $queue_a->enqueue(<データ>);
- Queue から引き抜いて $data に格納する
 $data = $queue_a->dequeue();

//==============================================================================
* thread 間で共有する変数 [#e3cfa8b5]
- thread 間で共有したい変数は、その旨明示的に宣言する必要がある。
 use threads;
 use threads::shared; # thread 間で共有するデータを扱う
 
 my <thread間共有変数> : shared = <初期化値>;
- 例
 use threads;
 use threads::shared; # thread 間で共有するデータを扱う
 
 my $data : shared = 2;
 my $data : shared = 2;    # 変数を初期化する値は、 ": shared" に続けて代入する
 my @datas : shared = ();

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS