diff options
Diffstat (limited to 'doc/FAQ.ja')
| -rw-r--r-- | doc/FAQ.ja | 114 | 
1 files changed, 3 insertions, 111 deletions
| @@ -1,4 +1,4 @@ -FAQ    2007/07/23 +FAQ    2016/04/06  1. 最長マッチ @@ -6,36 +6,7 @@ FAQ    2007/07/23     を使用すれば最長マッチになる。 -2. スレッドセーフ - -   スレッドセーフにするには、以下の(A)と(B)のどちらかを行なえば -   よい。 - -   (A) Oniguruma Layer - -       oniguruma/regint.hの中の以下のマクロを定義する。 - -       USE_MULTI_THREAD_SYSTEM -       THREAD_ATOMIC_START -       THREAD_ATOMIC_END -       THREAD_PASS - -       何らかの初期化/終了処理が必要であれば、以下のマクロに定義する。 -       THREAD_SYSTEM_INIT -       THREAD_SYSTEM_END - - -   (B) Application Layer - -       同時に複数のスレッドが、正規表現オブジェクトを作成する、 -       または解放する、ことを行なってはならない。 -       それらのオブジェクトが全く別のものであっても。 - -   もう少し詳しい説明は、このドキュメントの中の -   "スレッドセーフに関する補足"に書いておいた。 - - -3. CR + LF +2. CR + LF     DOSの改行(CR(0x0c) + LF(0x0a)の連続) @@ -44,87 +15,8 @@ FAQ    2007/07/23       /* #define USE_CRNL_AS_LINE_TERMINATOR */ -4. メーリングリスト +3. メーリングリスト     鬼車に関するメーリングリストは存在しない。  //END - - - -スレッドセーフに関する補足 - -スレッドセーフにするには、個別のアプリケーションの中で行うか、 -Onigurumaライブラリの中で行うか、どちらかを選ぶことができます。 -(Onigurumaを使用する側で対処するか、Onigurumaに対処させるか -どちらか片方で行う必要があるということです。) - -これらの方法について、以下(A)と(B)で説明します。 - -マルチスレッドAPIは、それぞれのプラットフォームによっても -異なりますので、以下の説明の中で具体的に何を呼ぶのかを -書くことは無理です。実際に使用されるマルチスレッドAPIで、 -対応する機能のものを指定してください。 - -(A) Onigurumaの中で対応する場合 - -oniguruma/regint.hの中で以下のマクロを定義して再コンパイルしてください。 - -USE_MULTI_THREAD_SYSTEM - -  単に有効にすればよいです。 - -THREAD_ATOMIC_START -THREAD_ATOMIC_END - -  THREAD_ATOMIC_STARTからTHREAD_ATOMIC_ENDで囲まれた -  プログラムのコード部分をあるスレッドが実行中に、他の -  スレッドに実行権が移動しないことを保障するものに定義 -  してください。 -  (名前の通り、囲まれたコード部分をスレッドアトミックに -   するという意味) - -THREAD_PASS - -  これを実行したスレッドから、他のスレッドに実行権を委譲 -  するものに定義をしてください。(再スケジュールを呼び出す -  という意味) -  対応する機能が全くなければ、空定義にしてください。 - -(参考例) -Rubyの場合を例にすると、 -Rubyは自分自身で独自のスレッド機能を実装しています。 -その機能を使用すると、以下のように定義すればよいことに -なります。 - -#define USE_MULTI_THREAD_SYSTEM -#define THREAD_SYSTEM_INIT -#define THREAD_SYSTEM_END -#define THREAD_ATOMIC_START       DEFER_INTS -#define THREAD_ATOMIC_END         ENABLE_INTS -#define THREAD_PASS               rb_thread_schedule() - -Rubyの場合、タイマ割り込みを使用して、スレッドの切り替えを -行っています。DEFER_INTSは割り込みハンドラの実行を一時的に -止めるためのマクロです。ENABLE_INTSマクロで割り込みハンドラ -の実行を許可します。 -これによって、THREAD_ATOMIC_STARTからTHREAD_ATOMIC_END -で囲まれた部分の実行中に、他のスレッドに実行権が移動しません。 - - -(B) アプリケーションの中で対応する場合 - -以下を保障するように、スレッドの実行を制御してください。 - -同時に複数のスレッドが、正規表現オブジェクトを作成する、または解放する、ことを -行なってはならない。それらのオブジェクトが全く別のものであっても。 - -onig_new(), onig_new_deluxe(), onig_free()のどれかの呼び出しを、 -複数のスレッドが同時に実行することを避けてください。同時でなければ別にかまいません。 - -これは何故必要なのかというと、正規表現オブジェクトを作成する -過程で、内部で共通に参照するテーブルがあります。 -このテーブルに対してのデータ登録処理が複数のスレッドで衝突して -異常な状態にならないために必要です。 - -// END | 
