Threads[Mutex][Lock] - mutexをロックする
使い方
Lock( mutexId )
パラメータ
mutexId - ミューテックス識別子 (整数)
|
説明
|
|
•
|
複数のスレッドが 1 つのミューテックスのロックをしようとしているとき、スレッドがロックをロックを得る保証はありません。これは、他のすれっどがロックを得るために待機する間、スレッドがミューテックスをアンロックして再びロックすることが可能なことを意味します。
|
•
|
Lock コマンドは現在のスレッドの識別子 mutexId を持つミューテックスをロックします。 mutexId を持つスレッドがロックしているものがないとき、Lock をすぐに行います。スレッドが既にロックされているときは、 Lock はミューテックスがアンロックされるまで待機します。Lock は現在のスレッドに対してロックすることを試みます。
|
•
|
ロックされているミューテックスを開放するためには、Unlock コマンドを使います。
|
•
|
複数のスレッドは 1 つのミューテックスをロックしようとするとき、
|
•
|
ミューテックスの使い方について詳しくは Mutex を参照ください。
|
|
|
例
|
|
>
|
p := proc( m )
global count;
print( count );
count := count+1;
end proc;
|
p := proc(m) global count; print(count); count := count + 1 end proc
| |
関数 p を 10 個のスレッドで作成します。
>
|
Threads:-Wait( seq( Threads:-Create( p(m) ), i=1..10 ) );
|
ミューテックスなしで、同じ値を複数プリントします。
>
|
p := proc( m )
global count;
Threads:-Mutex:-Lock( m );
print( count );
count := count+1;
Threads:-Mutex:-Unlock( m );
end proc;
|
p := proc(m)
global count;
Threads:-Mutex:-Lock(m);
print(count);
count := count + 1;
Threads:-Mutex:-Unlock(m)
end proc
| |
>
|
m := Threads:-Mutex:-Create();
|
新たに関数 p を 10 個のスレッドで作成します。
>
|
Threads:-Wait( seq( Threads:-Create( p(m) ), i=1..10 ) ):
|
ミューテックスを使って共有変数へのアクセスを制御します。このとき一度にプリントします。
>
|
Threads:-Mutex:-Destroy( m );
|
|
|
Download Help Document
Was this information helpful?