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) |