mytt.h

最終更新:2009/10/18

mytt.h

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_ */
Copyright (C) KAKU PROJECT (2009)KAKU PROJECT (2009)