mytt.h
最終更新:2009/10/18
001: /* mytt.h
002: * スレッドテーブルのサンプル
003: * ・保持するスレッド数の上限を設定。
004: */
005:
006: #ifndef _MYTT_H_
007: #define _MYTT_H_
008:
009: #ifndef APR_GENERAL_H
010: #include "apr_general.h"
011: #endif
012:
013: #ifndef APR_ERRNO_H
014: #include "apr_errno.h"
015: #endif
016:
017: #ifndef APR_THREAD_PROC_H
018: #include "apr_thread_proc.h"
019: #endif
020:
021: /*
022: * スレッドテーブル
023: * ・スレッドテーブルは処理中のサブスレッドのスレッドハンドルを保持する配列。
024: * ・インデクス変数で次の位置をポイントする。
025: * 条件:
026: * ・スレッドテーブルはメインスレッドでのみ操作する。
027: * ・スレッドテーブルはサブスレッドから操作してはならない。
028: * ルール:
029: * (1)arr[i]==NULL の時、arr[i] はサブスレッドを保持していない。
030: * また、過去にサブスレッドを保持していた場合は同期済である。
031: * (2)arr[i]!=NULL の時、arr[i] は同期前のサブスレッドを保持している。
032: */
033:
034: typedef struct _my_thread_table_st {
035: apr_pool_t *pool; /* メモリプール */
036: int num; /* スレッドテーブルのサイズ */
037: int index; /* スレッドテーブルのインデクス変数 */
038: apr_thread_t **arr; /* スレッドテーブル(スレッドハンドルの配列) */
039: apr_threadattr_t *attr; /* デフォルトのスレッド属性 */
040: } my_thread_table;
041:
042:
043: /* 【必須】スレッドテーブルの初期化
044: * ・必ずメインスレッドの最初に呼ぶこと。
045: */
046:
047: void my_thread_table_init(
048: my_thread_table *mtt /* IN/OUT: スレッドテーブル(呼び出し元で領域確保する) */
049: ,int num /* IN:スレッドテーブルのサイズ */
050: , apr_pool_t *pool /* OUT:メモリプール */
051: );
052:
053:
054: /* スレッドの生成
055: * 返り値:
056: * 成功時には APR_SUCCESS。
057: */
058:
059: apr_status_t my_thread_create (
060: my_thread_table *mtt /* IN:スレッドテーブル */
061: , apr_thread_t **thd /* OUT:生成したサブスレッドのスレッドハンドル */
062: , apr_thread_start_t func /* IN:サブスレッドが処理する関数 */
063: , void *data /* IN:サブスレッドが処理する関数で使うデータ */
064: );
065:
066:
067: /* 【必須】スレッドテーブルのリセット
068: * ・スレッドテーブルが保持する全サブスレッドの同期をしてからスレッドテーブルをリセットする。
069: * ・メインスレッドで最後に必ず呼ぶこと。
070: * 返り値:
071: * 成功時には APR_SUCCESS。
072: */
073:
074: apr_status_t my_thread_table_clear (
075: my_thread_table *mtt /* IN:スレッドテーブル */
076: );
077:
078:
079: #endif /* _MYTT_H_ */
![]() | KAKU PROJECT (2009) |