FreeBASIC マニュアルのトップに戻る

FreeBASIC CondSignal

目次→実行時ライブラリー参考→多重スレッド化サポートCONDSIGNAL←オリジナル・サイト

CONDSIGNAL 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

Condwait を呼ぶことで休止したスレッドを、再開します。

構文:
declare sub Condsignal ( byval handle as any ptr )

用法:
Condsignal ( handle )

パラメタ:
handle
条件変数のハンドル。

記述:
条件付きが Condcreate でスレッドが開始すると、そのうちの1つ以上(主プログラムを実行している暗黙の主スレッドを含む)が条件付きで Condwait に設定されます。これらは、他のスレッドが Condsignal して、待機中のスレッドが再起動できることを示すまで、停止します。
Condbroadcast を使うと、条件を待機しているすべてのスレッドを再起動できます。
プログラムの最後に、Conddestroy を使って OS のリソース・リークを回避する必要があります。

Condsignal は、待機中の 1つのスレッドを再開します。
mutex がロックされた後に、Condsignal を呼び出す必要があります(Condwait で使われるものと同じ mutex を使用)。
条件付きで待機しているスレッドがない場合、何も起こりません(信号は永久に失われます)。
いくつかが待機している場合は、1つだけが再起動されます。
呼び出し側は、Condwait サブルーチンを完了するために、mutex のロックを解除する必要があります。

例:
CondcreateCondwaitCondbroadcast も参照下さい。

' このとても簡単なコード例は、いくつかの条件変数ルーチンの使い方を示します。
' メインルーチンは、文字列を初期化し、一つのスレッドを作ります。
' メイン・ルーチンは、スレッドから状態信号を受け取るまで、待ちます。そして、補完した文字列を表示します。
' スレッドは文字列を補完して、そして状態信号を送ります。
'
'相互排除の原理 + 単純な同期
'          Thread#A             XOR + ==>            Thread#B
'.....                                     .....
'MutexLock(mut)                            MutexLock(mut)
'  Do_something_with_exclusion               Do_something_with_exclusion
'  Thread_signal = true -------------------> While Thread_signal <> true
'  CondSignal(cond) -------------------------> CondWait(cond, mut)
'  Do_something_with_exclusion      .------> Wend
'MutexUnlock(mut) ------------------'        Thread_signal = false
'.....                                       Do_something_with_exclusion
'.....                                     MutexUnlock(mut)
'.....                                     .....


Dim Shared As Any Ptr mutex
Dim Shared As Any Ptr cond
Dim Shared As String txt
Dim As Any Ptr pt
Dim Shared As Integer ok = 0

Sub thread (ByVal p As Any Ptr)
    Print "スレッドは、文字列を補完しています"
    MutexLock(mutex)
    Sleep 400, 1
    txt &= " スレッドによって補完"
    ok = 1
    CondSignal(cond)
    MutexUnlock(mutex)
    Print "スレッドが、完了した処理を通知します"
End Sub

mutex = MutexCreate
cond = CondCreate

txt = "文字列の例"
Print "main() 文字列を初期化 = " & txt
Print "main は、1つのスレッドをつくります"
Print
pt = ThreadCreate(@thread)
MutexLock(mutex)
While ok <> 1
    CondWait(cond, mutex)
Wend
Print
Print "main() に戻って, 文字列は = " & txt
ok = 0
MutexUnlock(mutex)

ThreadWait(pt)
MutexDestroy(mutex)
CondDestroy(cond)
Sleep


方言差:

プラットホーム差:

QBからの違い:

参照:

多重スレッド化サポート に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2024-03-13 10:37:35
日本語翻訳:WATANABE Makoto、原文著作者:AntoniGual

ホームページのトップに戻る

表示-非営利-継承