Rubyの勉強をしている。
そのとき、スレッドを並行実行するサンプルを丸写しした。
そのサンプルをErlang版として記述した。
以下にそれをコピペしておく。
◆並行実行動作
1.2つのプロセスが生成される。2.それぞれのプロセスはある時間(秒)スリープして、時間経過後、ある文字を標準出力する。
3.7秒後メインプロセスが終了する(生成したプロセスも終了する)。
◆ソース
-module(test_thread_start).
-compile(export_all).
%% 標準出力
log_print( Start_time, String ) ->
{ _, Now, _ } = erlang:now(),
Time = Now - Start_time,
io:format( "~ps: ~s~n", [ Time, String ] ).
%% プロセス生成
loop_thread( Start_time, Sec, Str ) ->
spawn( test_thread_start, thread, [ Start_time, Sec, Str ] ).
%% 生成したプロセスの動作
thread( Start_time, Wait_time, String ) ->
timer:sleep( Wait_time ),
log_print( Start_time, String ),
thread( Start_time, Wait_time, String ).
start() ->
{ _, Start_time, _ } = erlang:now(),
log_print( Start_time, "Start" ),
loop_thread( Start_time, 2000, "a" ),
loop_thread( Start_time, 3000, "b" ),
timer:sleep( 7000 ),
log_print( Start_time, "End" ).

0 件のコメント:
コメントを投稿