source: libcf/trunk/include/cf_thread.h@ 26

Last change on this file since 26 was 26, checked in by cheese, 11 years ago

#1 documentation with doxygen

File size: 3.3 KB
Line 
1/**
2 * @file cf_thread.h
3 * @author myusgun <myusgun@gmail.com>
4 * @version 0.1
5 *
6 * @remark 멀티스레드 및 뮤텍스 지원
7 */
8#ifndef __CF_THREAD_H__
9#define __CF_THREAD_H__
10
11#include "cf_base.h"
12
13#define CF_ERROR_THREAD_CREATE CF_ERROR_THREAD - 1
14#define CF_ERROR_THREAD_INVALID_ARGS CF_ERROR_THREAD - 2
15
16#define CF_ERROR_MUTEX_CREATE CF_ERROR_MUTEX - 1
17#define CF_ERROR_MUTEX_INVALID_ARGS CF_ERROR_MUTEX - 2
18
19#ifdef _WIN32
20# define CF_THREAD_RETURN unsigned int /**< 스레드 워커 함수 반환 형 */
21# define CF_THREAD_CALL __stdcall /**< 스레드 워커 함수 호출 규약 */
22#else // #ifdef _WIN32
23# define CF_THREAD_RETURN void * /**< 스레드 워커 함수 반환 형 */
24# define CF_THREAD_CALL /**< 스레드 워커 함수 호출 규약 */
25#endif // #ifdef _WIN32
26
27/** 스레드 워커 함수 형태이며, CF_Thread_Function 형식 */
28typedef CF_THREAD_RETURN (CF_THREAD_CALL * CF_Thread_Function) (void *);
29
30/** 스레드 아이디 */
31typedef void * CF_Thread;
32
33/** 뮤텍스 아이디 */
34typedef void * CF_Mutex;
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40/**
41 * 스레드를 생성
42 *
43 * @return 성공 시, CF_OK; 실패 시, 오류 코드
44 *
45 * @param threadID 스레드 아이디 주소
46 * @param callback 스레드 워커 함수 이름
47 * @param arg 스레드 함수로 전달할 인자
48 *
49 * @code
50
51#include "cf_thread.h"
52
53CF_Mutex globalMutex;
54
55CF_THREAD_RETURN CF_THREAD_CALL worker (void * arg) {
56 if (CF_Mutex_Create (&globalMutex) < 0) {
57 // error
58 }
59
60 if (CF_Mutex_Lock (&globalMutex) < 0) { // for critical section
61 // error
62 }
63
64 // critical section
65
66 if (CF_Mutex_Unlock (&globalMutex) < 0) { // for critical section
67 // error
68 }
69
70 if (CF_Mutex_Destory (&globalMutex) < 0) {
71 // error
72 }
73}
74
75int main (void) {
76 CF_Thread tid;
77 if (CF_Thread_Craete (&tid, worker, NULL) < 0) {
78 // error
79 }
80
81 if (CF_Thread_Join (&tid) < 0) { // block
82 // error
83 }
84
85 if (CF_Thread_Release (&tid) < 0) {
86 // error
87 }
88}
89
90 * @endcode
91 */
92CF_EXPORT int
93CF_Thread_Create (CF_Thread * threadID,
94 CF_Thread_Function callback,
95 void * arg);
96
97/**
98 * 스레드 아이디를 해제
99 *
100 * @return 성공 시, CF_OK; 실패 시, 오류 코드
101 *
102 * @param threadID 스레드 아이디 주소
103 *
104 * @remark 스레드 아이디를 해제하는 것이며 워커 스레드가 종료되지 않음
105 */
106CF_EXPORT int
107CF_Thread_Release (CF_Thread * threadID);
108
109/**
110 * 스레드가 종료될 때 까지 대기
111 *
112 * @return CF_OK 반환
113 *
114 * @param threadID 스레드 아이디 주소
115 */
116CF_EXPORT int
117CF_Thread_Join (CF_Thread * threadID);
118
119/**
120 * 뮤텍스 생성
121 *
122 * @return 성공 시, CF_OK; 실패 시, 오류 코드
123 *
124 * @param mutex 뮤텍스 아이디 주소
125 *
126 * @see CF_Thread_Craete
127 */
128CF_EXPORT int
129CF_Mutex_Create (CF_Mutex * mutex);
130
131/**
132 * 뮤텍스 해제
133 *
134 * @return 성공 시, CF_OK; 실패 시, 오류 코드
135 *
136 * @param mutex 뮤텍스 아이디 주소
137 */
138CF_EXPORT int
139CF_Mutex_Destory (CF_Mutex * mutex);
140
141/**
142 * 뮤텍스 잠금
143 *
144 * @return 성공 시, CF_OK; 실패 시, 오류 코드
145 *
146 * @param mutex 뮤텍스 아이디 주소
147 */
148CF_EXPORT int
149CF_Mutex_Lock (CF_Mutex * mutex);
150
151/**
152 * 뮤텍스 잠금 해제
153 *
154 * @return 성공 시, CF_OK; 실패 시, 오류 코드
155 *
156 * @param mutex 뮤텍스 아이디 주소
157 */
158CF_EXPORT int
159CF_Mutex_Unlock (CF_Mutex * mutex);
160
161#ifdef __cplusplus
162}
163#endif
164
165#endif // #ifndef __CF_THREAD_H__
Note: See TracBrowser for help on using the repository browser.