pthread.3
上传用户:shtangtang
上传日期:2007-01-04
资源大小:167k
文件大小:11k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. ." Copyright (c) 1999-2000 Orn E. Hansen <oe.hansen@gamma.telenordia.se>
  2. ."
  3. ." Permission is granted to make and distribute verbatim copies of this
  4. ." manual provided the copyright notice and this permission notice are
  5. ." preserved on all copies.
  6. ."
  7. ." Permission is granted to copy and distribute modified versions of this
  8. ." manual under the conditions for verbatim copying, provided that the
  9. ." entire resulting derived work is distributed under the terms of a
  10. ." permission notice identical to this one
  11. ."                                                                            
  12. .TH THREADS 3 "10 Feb 2000" "Threads 2.0" "Threads C++ Library"
  13. .SH NAME
  14. pthread - An abstract class, to create a threaded program.
  15. .SH SYNOPSIS
  16. .B        #include <thread.h>
  17. .sp 2
  18. .B         class threaded : public pthread {
  19. .sp 0
  20. .B           threaded() { };
  21. .sp 0
  22. .B           ~threaded() { };
  23. .sp 1
  24. .B           int thread(void *) { // threaded execution happens here };
  25. .sp 0
  26. .B          }
  27. .SH DESCRIPTION
  28. The
  29. .I pthread
  30. class is a part of the threads C++ library that focuses on
  31. simplifying program threading.
  32. By providing an abstract class, like the pthread class, the user is
  33. presented with a simple method of starting a program threaded and
  34. is able to select wether the thread is an application by itself or
  35. merely a thread in one.
  36. .LP
  37. The class provides numerous methods to control the thread, that
  38. is associated with the class.  These methods are focused on
  39. synchronizing the threads execution with the parent thread, and
  40. providing access to local variables, as well as changes the runtime
  41. state of the thread itself.
  42. .LP
  43. These methods are listed here, with some explanation on how they
  44. function.
  45. .TP 12
  46. .B retval()
  47. A thread can exeit in two ways, it can do a 'return' from the
  48. thread function, or do exit through the 'exit' function call.  Both
  49. of which provide a means to return a value.  To make the
  50. library provide similar return means, as the posix threads do,
  51. it is possible to do a
  52. .I exit(void *)
  53. where a pointer to a value is registered as a return value.  In
  54. such cases, the means in accessing the returned value is through
  55. this method.
  56. .TP 12
  57. .B joining()
  58. This will tell if the thread being executed under the class, will
  59. join any other process on termination.  If this is the case, the
  60. process id returned, is an id of a process that is suspended and
  61. will be woken up, when the thread terminates.
  62. .TP 12
  63. .B gerrno()
  64. Each thread has its own errno variable, that the threaded program
  65. can set to an error value, with the help of
  66. .B error()
  67. class method.  It is then possible to read this error value, from
  68. a parallel or parent thread with this method.
  69. .TP 12
  70. .B id()
  71. Each thread, is started with its own process id.  This is to make
  72. certain that they are separable from the main thread, if ever
  73. needed.  This method provides means, to obtain the process id of
  74. the thread running inside the class.
  75. .TP 12
  76. .B signal()
  77. After having received a signal, either a restart or a suspend
  78. signal.  The thread will store it, for others to retreive and
  79. examine its state.  With this method, the user can see if the
  80. signal has been suspended or revived.
  81. .TP 12
  82. .B signal(int)
  83. Beyond merely obtaining the signal status, this methd provides
  84. the means of sending a signal to the thread.  It will return the
  85. signal last processed by the thread, which may not be the signal
  86. passed to this function.
  87. .TP 12
  88. .B canceled()
  89. This method will report, wether the thread has been canceled with
  90. the
  91. .B cancel()
  92. method.
  93. .TP 12
  94. .B detached()
  95. With this method, parent threads can obtain the status of any
  96. child threads, to see if they are stilled attached (child threads)
  97. of it.
  98. .TP 12
  99. .B joinable()
  100. When a thread has been detached, for instance... or it is the
  101. intention to detach a thread from its parent.  It is not desirable
  102. that it be joined with by other sibling threads.  This method
  103. provides a means to obtain the status of wether the thread is
  104. joinable by other sibling threads.
  105. .TP 12
  106. .B terminated()
  107. If a thread has terminated, this will return a true value to
  108. signify a termination state.
  109. .TP 12
  110. .B exited()
  111. If a thread has been exited with the 'exit' call, this will
  112. signify that status.
  113. .TP 12
  114. .B cancelstate()
  115. This method will tell the current cancelstate of the thread.  A
  116. cancel state can be one of following enumerated items:
  117. .IP
  118. .I cancel_enable
  119. - Cancelations are enabled.
  120. .sp 0
  121. .I cancel_disable
  122. - Cancelations are not allowed.
  123. .TP 12
  124. .B canceltype()
  125. Threads can be canceled in different ways, it can be terminated
  126. by means of forcing them through the 'exit(-1)' state, upon
  127. receiving a cancel signal.  Or they can be made to jump to a
  128. predefined location upon receiving that signal.  Both of which
  129. predetermine that the cancel state is
  130. .I cancel_enable
  131. and if not, no cancelation will occur.
  132. .IP
  133. .I cancel_deferred 
  134. - jump to a user definable location.
  135. .sp 0
  136. .I cancel_asynchronous 
  137. - exit through the 'exit' method.
  138. .TP 12
  139. .B joining(int)
  140. This method is provided to tell the thread to join with a given
  141. process upon termination.  The process is assumed to be in slumber,
  142. and will be revived when the thread exits.  It is upon the users
  143. responsibility to ensure that the process being joined with is
  144. actually a running process.
  145. .TP 12
  146. .B set(cancel_state)
  147. Change the cancel state, to the given parameter.
  148. .TP 12
  149. .B set(cancel_type)
  150. Change the cancel type, to the given parameter.
  151. .TP 12
  152. .B set(jumps,sigjump_buf *)
  153. Set either of two possible jump locations, the signal jump or the
  154. cancel jump, to the jump buffer associated with the method
  155. call.  Possible values for
  156. .I jumps
  157. are:
  158. .IP
  159. .I cancel_jump 
  160. - When cancel is received.
  161. .sp 0
  162. .I signal_jump 
  163. - When restart signal is received
  164. .TP 12
  165. .B set(booleans,bool)
  166. Set any of the boolean values, to the state given.  The booleans parameter
  167. is an enumeration code, for the numerous boolean variables that
  168. are located inside the class.  The ones settable are:
  169. .IP
  170. .I set_canceled   
  171. - set the cancel state value.
  172. .sp 0
  173. .I set_terminated 
  174. - set the terminated state.
  175. .sp 0
  176. .I set_detached 
  177. - set the detached state.
  178. .sp 0
  179. .I set_exited 
  180. - set the exited state.
  181. .TP 12
  182. .B cancel()
  183. Send the thread, a cancel signal that will cancel it if cancellation
  184. is enabled.  If the cancel type is deferred, the cancelation will
  185. jump to a location, that has been previously set with set(jumps,...)
  186. or exit the thread, if the cancel type is asynchronous.
  187. .TP 12
  188. .B suspend()
  189. This is a static method, that will suspend the calling process until
  190. a
  191. .I restart()
  192. signal is received.  Inside this method, cancelations will be ignored
  193. by the thread, except program exits will terminate the process.
  194. .TP 12
  195. .B suspend_with_cancelation()
  196. This will suspend the process, until a cancelation has been received,
  197. or the process is revived.  Whichever comes first.  The method is
  198. static, and will work on the process that calls it, and not the
  199. thread associated with the class.
  200. .TP 12
  201. .B restart()
  202. Send a restart signal to a thread, that has been suspended with
  203. either one of the above methods.  This method is not static, which
  204. means that it will restart the thread associated with the class.
  205. .TP 12
  206. .B jump(jumps)
  207. Make a jump to either of the registered jump locations, for signal
  208. or cancel jumps.  See
  209. .I set(jumps,sigjump_buf)
  210. .TP 12
  211. .B exit(void *)
  212. The normal posix threads, use a void * as an exit value to return
  213. to parent threads.  This method is provided as an historical means
  214. for programs that desire to be constructively equivalent to the
  215. posix treads.  The value will be accessable with the
  216. .I retval()
  217. method.
  218. .TP 12
  219. .B exit(int)
  220. This way in exiting an application is the one that is usually used
  221. by a program.  It will mark the value passed to the method, as an
  222. exit value that will be retrievable with the
  223. .I retcode()
  224. method.
  225. .TP 12
  226. .B exit()
  227. This will effectively be the same as if calling
  228. .I exit(0)
  229. .TP 12
  230. .B retcode()
  231. See the method
  232. .I exit(int)
  233. For a way to create a value that is retrievable through this method,
  234. but it will simply obtain the return value, registered by a thread.  It
  235. will only be usable after the thread has terminated.
  236. .TP 12
  237. .B running()
  238. This method will tell the caller, whether the scheduler has the
  239. thread on running schedule or not.  Its not really usable, since
  240. a zombie process is still on the schedulers list.  Use
  241. .I terminated()
  242. or
  243. .I canceled()
  244. to determine if the program is running or not.
  245. .TP 12
  246. .B join()
  247. This method will suspend the calling process, until the thread
  248. associated with the call terminates.  When it terminates, it will
  249. send the calling process a restart signal, restoring it to a
  250. running state and returning from this method.
  251. .LP
  252. The next methods, are provided for shared memory and process
  253. scoping.  Process scoping, is when two distinct processes share
  254. memory or variables for synchronisation.
  255. .TP 12
  256. .B set_project(const char *)
  257. A program that want's to share its resources must have a way for all
  258. other programs to identify its resources.  The way for this to
  259. happen, is to create a name that will identify it... which is
  260. upto the user to define.  This method provides a way to
  261. set the name of the programs resources.
  262. .TP 12
  263. .B set_permissions(int)
  264. When resources are shared, the user can define the permissions
  265. that will be given to other programs.  A program can allow others
  266. to read it's pages, or to read and write them depending on the
  267. normal unix protection methods for user/gropu/others.  The
  268. parameter passed to this method, is the permissions that should
  269. be used when creating shared resources.
  270. .TP 12
  271. .B shalloc(size_t)
  272. Allocate a specified amount of shared memory for users use.  This
  273. memory is taken from the systme is pages, where each page is
  274. of
  275. .I PAGE_SIZE
  276. size.  The memory returned to the user, is only a fragment of this
  277. page, that is
  278. .B size_t
  279. in size.  It is recomended that the user keep to the same
  280. principles with this method, as normally is done with the
  281. .I malloc()
  282. system call, as the
  283. .I threads library
  284. provides for management of the shared memory.
  285. .TP 12
  286. .B shdealloc(void *)
  287. Return memory retrieved with the above method, back to the
  288. shared memory pool.  This method will collect the shared memory
  289. page back, and upon receiving a whole free page, it will
  290. immediately return it back to the system and destroy it
  291. from the users address space.
  292. .LP
  293. The library installs signal handlers for all terminating signals,
  294. to ensure that shared memory is destroyed when they aren't needed
  295. anymore.
  296. .LP
  297. Suggestions and questions about the threads library should be
  298. directed to
  299. .IP
  300. kdb-list@brevet.nu
  301. .LP
  302. Or, to the specified author below.
  303. The threads home page is located at:
  304. .IP
  305. http://user.tninet.se/~dpn659b/threads.html
  306. .LP
  307. .SH AUTHOR
  308. Version 2.0
  309. Copyright (C) 1999-2000 Orn E. Hansen <oe.hansen@gamma.telenordia.se>.
  310. .LP
  311. Thanks those who reported their suggestions on how to
  312. improve the threads library.