Index: /trunk/include/cf_error.h
===================================================================
--- /trunk/include/cf_error.h	(revision 79)
+++ /trunk/include/cf_error.h	(revision 80)
@@ -53,6 +53,11 @@
 #define CF_ERROR_THREAD						CF_ERROR_BASE * 4
 /*------------------------------------------------------------*/
-#define CF_ERROR_THREAD_CREATE				CF_ERROR_THREAD - 1
-#define CF_ERROR_THREAD_INVALID_ARGS		CF_ERROR_THREAD - 2
+#define CF_ERROR_THREAD_ALLOC				CF_ERROR_THREAD - 1
+#define CF_ERROR_THREAD_CREATE				CF_ERROR_THREAD - 2
+#define CF_ERROR_THREAD_INVALID_ARGS		CF_ERROR_THREAD - 3
+#define CF_ERROR_THREAD_INIT_ATTR			CF_ERROR_THREAD - 4
+#define CF_ERROR_THREAD_SET_INHERIT_SCHED	CF_ERROR_THREAD - 5
+#define CF_ERROR_THREAD_SET_SCHED_POLICY	CF_ERROR_THREAD - 6
+#define CF_ERROR_THREAD_SET_SCHED_PARAM		CF_ERROR_THREAD - 7
 /* }}} thread */
 
Index: /trunk/src/cf_debug.c
===================================================================
--- /trunk/src/cf_debug.c	(revision 79)
+++ /trunk/src/cf_debug.c	(revision 80)
@@ -376,5 +376,5 @@
 	}
 
-	return CF_OK;
+	return result;
 }
 
@@ -392,11 +392,7 @@
 
 	if (gDebugSingleCtx == NULL)
-	{
 		result = CF_Debug_CreateCtx (&gDebugSingleCtx);
-		if (result != CF_OK)
-			return result;
-	}
-
-	return CF_OK;
+
+	return result;
 }
 
Index: /trunk/src/cf_thread.c
===================================================================
--- /trunk/src/cf_thread.c	(revision 79)
+++ /trunk/src/cf_thread.c	(revision 80)
@@ -54,4 +54,13 @@
  * @param callback	스레드 워커 함수 이름
  * @param arg		스레드 함수로 전달할 인자
+ *
+ * @remarks
+ * pthread(POSIX Thread)에서 지원되는 스케줄링 정책은 SCHED_OTHER, SCHED_FIFO, SCHED_RR 등이 존재 <br />
+ * 일반적으로 설정되는 스케줄링 정책의 기본값은 SCHED_OTHER이며, 솔라리스 환경에서 SCHED_OTHER는 TS(timesharing) 방식으로 명시되어 있음 <br />
+ * 그러나 개발 단계에서 테스트된 동작은 SCHED_FIFO와 동일하였으며, 때문에 솔라리스 환경에서는 스케줄링 정책을 SCHED_RR로 명시하도록 함 <br />
+ * <br />
+ * 참고 url <br />
+ *  - http://kldp.org/node/18841 , "SCHED_OTHER, SCHED_FIFO, SCHED_RR에 대해..." <br />
+ *  - http://blog.naver.com/popjunior/80021646476 , "AIX, CPU 모니터링과 튜닝" <br />
  */
 int
@@ -64,20 +73,72 @@
 	THREAD_WORKER f = (THREAD_WORKER) callback;
 
-#if defined(_WIN32) || defined(_WIN64)
-
-	*threadID = (THREAD_TYPE) CreateThread (NULL, 0, f, arg, 0, NULL);
-	if (*threadID == NULL)
-		return CF_ERROR_THREAD_CREATE;
-#else
-	*threadID = (THREAD_TYPE *) calloc (sizeof (THREAD_TYPE), 1);
-	if (*threadID == NULL)
-		return CF_ERROR_THREAD_CREATE;
-
-	result = pthread_create ((THREAD_TYPE *) *threadID, NULL, f, arg);
-	if (result < 0)
-		return CF_ERROR_THREAD_CREATE;
-#endif
-
-	return CF_OK;
+	TRY
+	{
+#if defined(_WIN32) || defined(_WIN64)
+
+		*threadID = (THREAD_TYPE) CreateThread (NULL, 0, f, arg, 0, NULL);
+		if (*threadID == NULL)
+		{
+			result = CF_ERROR_THREAD_CREATE;
+			TRY_BREAK;
+		}
+#else
+# if defined(_SOLARIS)
+		pthread_attr_t		attr;
+		struct sched_param	sched;
+
+		result = pthread_attr_init (&attr);
+		if (result)
+		{
+			result = CF_ERROR_THREAD_INIT_ATTR;
+			TRY_BREAK;
+		}
+
+		result = pthread_attr_setinheritsched (&attr, PTHREAD_EXPLICIT_SCHED);
+		if (result)
+		{
+			result = CF_ERROR_THREAD_SET_INHERIT_SCHED;
+			TRY_BREAK;
+		}
+
+		result = pthread_attr_setschedpolicy (&attr, SCHED_RR);
+		if (result)
+		{
+			result = CF_ERROR_THREAD_SET_SCHED_POLICY;
+			TRY_BREAK;
+		}
+
+		sched.sched_priority = 1;
+		result = pthread_attr_setschedparam (&attr, &sched);
+		if (result)
+		{
+			result = CF_ERROR_THREAD_SET_SCHED_PARAM;
+			TRY_BREAK;
+		}
+# endif // # if defined(_SOLARIS)
+
+		*threadID = (THREAD_TYPE *) calloc (sizeof (THREAD_TYPE), 1);
+		if (*threadID == NULL)
+		{
+			result = CF_ERROR_THREAD_ALLOC;
+			TRY_BREAK;
+		}
+
+		result = pthread_create ((THREAD_TYPE *) *threadID, &attr, f, arg);
+		if (result < 0)
+		{
+			result = CF_ERROR_THREAD_CREATE;
+			TRY_BREAK;
+		}
+#endif
+	}
+	CATCH_IF (result < 0)
+	{
+		if (result == CF_ERROR_THREAD_ALLOC	|| 
+			result == CF_ERROR_THREAD_CREATE)
+			CF_Thread_Release (threadID);
+	}
+
+	return result;
 }
 
