OSDN Git Service

(split) LDP: Update POT and ja.po to LDP v3.37.
[linuxjm/LDP_man-pages.git] / po4a / pthread / po / pthread.pot
1 # SOME DESCRIPTIVE TITLE
2 # Copyright (C) YEAR Free Software Foundation, Inc.
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5 #
6 #, fuzzy
7 msgid ""
8 msgstr ""
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "POT-Creation-Date: 2012-03-22 04:26+0900\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
14 "Language: \n"
15 "MIME-Version: 1.0\n"
16 "Content-Type: text/plain; charset=CHARSET\n"
17 "Content-Transfer-Encoding: 8bit\n"
18
19 #. type: TH
20 #: build/C/man2/getcontext.2:23
21 #, no-wrap
22 msgid "GETCONTEXT"
23 msgstr ""
24
25 #. type: TH
26 #: build/C/man2/getcontext.2:23
27 #, no-wrap
28 msgid "2009-03-15"
29 msgstr ""
30
31 #. type: TH
32 #: build/C/man2/getcontext.2:23 build/C/man3/pthread_attr_init.3:24 build/C/man3/pthread_attr_setaffinity_np.3:24 build/C/man3/pthread_attr_setdetachstate.3:24 build/C/man3/pthread_attr_setguardsize.3:24 build/C/man3/pthread_attr_setinheritsched.3:24 build/C/man3/pthread_attr_setschedparam.3:24 build/C/man3/pthread_attr_setschedpolicy.3:24 build/C/man3/pthread_attr_setscope.3:24 build/C/man3/pthread_attr_setstack.3:24 build/C/man3/pthread_attr_setstackaddr.3:24 build/C/man3/pthread_attr_setstacksize.3:24 build/C/man3/pthread_cancel.3:24 build/C/man3/pthread_cleanup_push.3:24 build/C/man3/pthread_cleanup_push_defer_np.3:24 build/C/man3/pthread_create.3:24 build/C/man3/pthread_detach.3:24 build/C/man3/pthread_equal.3:24 build/C/man3/pthread_exit.3:24 build/C/man3/pthread_getattr_np.3:24 build/C/man3/pthread_getcpuclockid.3:24 build/C/man3/pthread_join.3:24 build/C/man3/pthread_kill.3:24 build/C/man3/pthread_kill_other_threads_np.3:24 build/C/man3/pthread_self.3:24 build/C/man3/pthread_setaffinity_np.3:24 build/C/man3/pthread_setcancelstate.3:24 build/C/man3/pthread_setconcurrency.3:23 build/C/man3/pthread_setschedparam.3:24 build/C/man3/pthread_setschedprio.3:24 build/C/man3/pthread_sigmask.3:24 build/C/man3/pthread_sigqueue.3:23 build/C/man3/pthread_testcancel.3:24 build/C/man3/pthread_tryjoin_np.3:24 build/C/man3/pthread_yield.3:23 build/C/man7/pthreads.7:24
33 #, no-wrap
34 msgid "Linux"
35 msgstr ""
36
37 #. type: TH
38 #: build/C/man2/getcontext.2:23 build/C/man3/makecontext.3:25 build/C/man3/pthread_attr_init.3:24 build/C/man3/pthread_attr_setaffinity_np.3:24 build/C/man3/pthread_attr_setdetachstate.3:24 build/C/man3/pthread_attr_setguardsize.3:24 build/C/man3/pthread_attr_setinheritsched.3:24 build/C/man3/pthread_attr_setschedparam.3:24 build/C/man3/pthread_attr_setschedpolicy.3:24 build/C/man3/pthread_attr_setscope.3:24 build/C/man3/pthread_attr_setstack.3:24 build/C/man3/pthread_attr_setstackaddr.3:24 build/C/man3/pthread_attr_setstacksize.3:24 build/C/man3/pthread_cancel.3:24 build/C/man3/pthread_cleanup_push.3:24 build/C/man3/pthread_cleanup_push_defer_np.3:24 build/C/man3/pthread_create.3:24 build/C/man3/pthread_detach.3:24 build/C/man3/pthread_equal.3:24 build/C/man3/pthread_exit.3:24 build/C/man3/pthread_getattr_np.3:24 build/C/man3/pthread_getcpuclockid.3:24 build/C/man3/pthread_join.3:24 build/C/man3/pthread_kill.3:24 build/C/man3/pthread_kill_other_threads_np.3:24 build/C/man3/pthread_self.3:24 build/C/man3/pthread_setaffinity_np.3:24 build/C/man3/pthread_setcancelstate.3:24 build/C/man3/pthread_setconcurrency.3:23 build/C/man3/pthread_setschedparam.3:24 build/C/man3/pthread_setschedprio.3:24 build/C/man3/pthread_sigmask.3:24 build/C/man3/pthread_sigqueue.3:23 build/C/man3/pthread_testcancel.3:24 build/C/man3/pthread_tryjoin_np.3:24 build/C/man3/pthread_yield.3:23 build/C/man7/pthreads.7:24
39 #, no-wrap
40 msgid "Linux Programmer's Manual"
41 msgstr ""
42
43 #. type: SH
44 #: build/C/man2/getcontext.2:24 build/C/man3/makecontext.3:26 build/C/man3/pthread_attr_init.3:25 build/C/man3/pthread_attr_setaffinity_np.3:25 build/C/man3/pthread_attr_setdetachstate.3:25 build/C/man3/pthread_attr_setguardsize.3:25 build/C/man3/pthread_attr_setinheritsched.3:25 build/C/man3/pthread_attr_setschedparam.3:25 build/C/man3/pthread_attr_setschedpolicy.3:25 build/C/man3/pthread_attr_setscope.3:25 build/C/man3/pthread_attr_setstack.3:25 build/C/man3/pthread_attr_setstackaddr.3:25 build/C/man3/pthread_attr_setstacksize.3:25 build/C/man3/pthread_cancel.3:25 build/C/man3/pthread_cleanup_push.3:25 build/C/man3/pthread_cleanup_push_defer_np.3:25 build/C/man3/pthread_create.3:25 build/C/man3/pthread_detach.3:25 build/C/man3/pthread_equal.3:25 build/C/man3/pthread_exit.3:25 build/C/man3/pthread_getattr_np.3:25 build/C/man3/pthread_getcpuclockid.3:25 build/C/man3/pthread_join.3:25 build/C/man3/pthread_kill.3:25 build/C/man3/pthread_kill_other_threads_np.3:25 build/C/man3/pthread_self.3:25 build/C/man3/pthread_setaffinity_np.3:25 build/C/man3/pthread_setcancelstate.3:25 build/C/man3/pthread_setconcurrency.3:24 build/C/man3/pthread_setschedparam.3:25 build/C/man3/pthread_setschedprio.3:25 build/C/man3/pthread_sigmask.3:25 build/C/man3/pthread_sigqueue.3:24 build/C/man3/pthread_testcancel.3:25 build/C/man3/pthread_tryjoin_np.3:25 build/C/man3/pthread_yield.3:24 build/C/man7/pthreads.7:25
45 #, no-wrap
46 msgid "NAME"
47 msgstr ""
48
49 #. type: Plain text
50 #: build/C/man2/getcontext.2:26
51 msgid "getcontext, setcontext - get or set the user context"
52 msgstr ""
53
54 #. type: SH
55 #: build/C/man2/getcontext.2:26 build/C/man3/makecontext.3:28 build/C/man3/pthread_attr_init.3:28 build/C/man3/pthread_attr_setaffinity_np.3:28 build/C/man3/pthread_attr_setdetachstate.3:28 build/C/man3/pthread_attr_setguardsize.3:28 build/C/man3/pthread_attr_setinheritsched.3:28 build/C/man3/pthread_attr_setschedparam.3:28 build/C/man3/pthread_attr_setschedpolicy.3:28 build/C/man3/pthread_attr_setscope.3:28 build/C/man3/pthread_attr_setstack.3:28 build/C/man3/pthread_attr_setstackaddr.3:28 build/C/man3/pthread_attr_setstacksize.3:28 build/C/man3/pthread_cancel.3:27 build/C/man3/pthread_cleanup_push.3:28 build/C/man3/pthread_cleanup_push_defer_np.3:28 build/C/man3/pthread_create.3:27 build/C/man3/pthread_detach.3:27 build/C/man3/pthread_equal.3:27 build/C/man3/pthread_exit.3:27 build/C/man3/pthread_getattr_np.3:27 build/C/man3/pthread_getcpuclockid.3:27 build/C/man3/pthread_join.3:27 build/C/man3/pthread_kill.3:27 build/C/man3/pthread_kill_other_threads_np.3:27 build/C/man3/pthread_self.3:27 build/C/man3/pthread_setaffinity_np.3:28 build/C/man3/pthread_setcancelstate.3:28 build/C/man3/pthread_setconcurrency.3:27 build/C/man3/pthread_setschedparam.3:28 build/C/man3/pthread_setschedprio.3:27 build/C/man3/pthread_sigmask.3:27 build/C/man3/pthread_sigqueue.3:26 build/C/man3/pthread_testcancel.3:27 build/C/man3/pthread_tryjoin_np.3:28 build/C/man3/pthread_yield.3:26
56 #, no-wrap
57 msgid "SYNOPSIS"
58 msgstr ""
59
60 #. type: Plain text
61 #: build/C/man2/getcontext.2:28 build/C/man3/makecontext.3:30
62 msgid "B<#include E<lt>ucontext.hE<gt>>"
63 msgstr ""
64
65 #. type: Plain text
66 #: build/C/man2/getcontext.2:30
67 msgid "B<int getcontext(ucontext_t *>I<ucp>B<);>"
68 msgstr ""
69
70 #. type: Plain text
71 #: build/C/man2/getcontext.2:32
72 msgid "B<int setcontext(const ucontext_t *>I<ucp>B<);>"
73 msgstr ""
74
75 #. type: SH
76 #: build/C/man2/getcontext.2:32 build/C/man3/makecontext.3:35 build/C/man3/pthread_attr_init.3:36 build/C/man3/pthread_attr_setaffinity_np.3:39 build/C/man3/pthread_attr_setdetachstate.3:38 build/C/man3/pthread_attr_setguardsize.3:38 build/C/man3/pthread_attr_setinheritsched.3:38 build/C/man3/pthread_attr_setschedparam.3:38 build/C/man3/pthread_attr_setschedpolicy.3:38 build/C/man3/pthread_attr_setscope.3:38 build/C/man3/pthread_attr_setstack.3:52 build/C/man3/pthread_attr_setstackaddr.3:38 build/C/man3/pthread_attr_setstacksize.3:38 build/C/man3/pthread_cancel.3:34 build/C/man3/pthread_cleanup_push.3:37 build/C/man3/pthread_cleanup_push_defer_np.3:37 build/C/man3/pthread_create.3:36 build/C/man3/pthread_detach.3:35 build/C/man3/pthread_equal.3:34 build/C/man3/pthread_exit.3:34 build/C/man3/pthread_getattr_np.3:35 build/C/man3/pthread_getcpuclockid.3:35 build/C/man3/pthread_join.3:35 build/C/man3/pthread_kill.3:35 build/C/man3/pthread_kill_other_threads_np.3:33 build/C/man3/pthread_self.3:34 build/C/man3/pthread_setaffinity_np.3:39 build/C/man3/pthread_setcancelstate.3:36 build/C/man3/pthread_setconcurrency.3:35 build/C/man3/pthread_setschedparam.3:38 build/C/man3/pthread_setschedprio.3:34 build/C/man3/pthread_sigmask.3:36 build/C/man3/pthread_sigqueue.3:43 build/C/man3/pthread_testcancel.3:34 build/C/man3/pthread_tryjoin_np.3:40 build/C/man3/pthread_yield.3:34 build/C/man7/pthreads.7:27
77 #, no-wrap
78 msgid "DESCRIPTION"
79 msgstr ""
80
81 #. type: Plain text
82 #: build/C/man2/getcontext.2:44
83 msgid ""
84 "In a System V-like environment, one has the two types I<mcontext_t> and "
85 "I<ucontext_t> defined in I<E<lt>ucontext.hE<gt>> and the four functions "
86 "B<getcontext>(), B<setcontext>(), B<makecontext>(3)  and B<swapcontext>(3)  "
87 "that allow user-level context switching between multiple threads of control "
88 "within a process."
89 msgstr ""
90
91 #. type: Plain text
92 #: build/C/man2/getcontext.2:48
93 msgid ""
94 "The I<mcontext_t> type is machine-dependent and opaque.  The I<ucontext_t> "
95 "type is a structure that has at least the following fields:"
96 msgstr ""
97
98 #. type: Plain text
99 #: build/C/man2/getcontext.2:58
100 #, no-wrap
101 msgid ""
102 "typedef struct ucontext {\n"
103 "    struct ucontext *uc_link;\n"
104 "    sigset_t         uc_sigmask;\n"
105 "    stack_t          uc_stack;\n"
106 "    mcontext_t       uc_mcontext;\n"
107 "    ...\n"
108 "} ucontext_t;\n"
109 msgstr ""
110
111 #. type: Plain text
112 #: build/C/man2/getcontext.2:75
113 msgid ""
114 "with I<sigset_t> and I<stack_t> defined in I<E<lt>signal.hE<gt>>.  Here "
115 "I<uc_link> points to the context that will be resumed when the current "
116 "context terminates (in case the current context was created using "
117 "B<makecontext>(3)), I<uc_sigmask> is the set of signals blocked in this "
118 "context (see B<sigprocmask>(2)), I<uc_stack> is the stack used by this "
119 "context (see B<sigaltstack>(2)), and I<uc_mcontext> is the machine-specific "
120 "representation of the saved context, that includes the calling thread's "
121 "machine registers."
122 msgstr ""
123
124 #. type: Plain text
125 #: build/C/man2/getcontext.2:80
126 msgid ""
127 "The function B<getcontext>()  initializes the structure pointed at by I<ucp> "
128 "to the currently active context."
129 msgstr ""
130
131 #. type: Plain text
132 #: build/C/man2/getcontext.2:92
133 msgid ""
134 "The function B<setcontext>()  restores the user context pointed at by "
135 "I<ucp>.  A successful call does not return.  The context should have been "
136 "obtained by a call of B<getcontext>(), or B<makecontext>(3), or passed as "
137 "third argument to a signal handler."
138 msgstr ""
139
140 #. type: Plain text
141 #: build/C/man2/getcontext.2:96
142 msgid ""
143 "If the context was obtained by a call of B<getcontext>(), program execution "
144 "continues as if this call just returned."
145 msgstr ""
146
147 #. type: Plain text
148 #: build/C/man2/getcontext.2:107
149 msgid ""
150 "If the context was obtained by a call of B<makecontext>(3), program "
151 "execution continues by a call to the function I<func> specified as the "
152 "second argument of that call to B<makecontext>(3).  When the function "
153 "I<func> returns, we continue with the I<uc_link> member of the structure "
154 "I<ucp> specified as the first argument of that call to B<makecontext>(3).  "
155 "When this member is NULL, the thread exits."
156 msgstr ""
157
158 #. type: Plain text
159 #: build/C/man2/getcontext.2:114
160 msgid ""
161 "If the context was obtained by a call to a signal handler, then old standard "
162 "text says that \"program execution continues with the program instruction "
163 "following the instruction interrupted by the signal\".  However, this "
164 "sentence was removed in SUSv2, and the present verdict is \"the result is "
165 "unspecified\"."
166 msgstr ""
167
168 #. type: SH
169 #: build/C/man2/getcontext.2:114 build/C/man3/makecontext.3:81 build/C/man3/pthread_attr_init.3:65 build/C/man3/pthread_attr_setaffinity_np.3:73 build/C/man3/pthread_attr_setdetachstate.3:74 build/C/man3/pthread_attr_setguardsize.3:87 build/C/man3/pthread_attr_setinheritsched.3:81 build/C/man3/pthread_attr_setschedparam.3:71 build/C/man3/pthread_attr_setschedpolicy.3:69 build/C/man3/pthread_attr_setscope.3:88 build/C/man3/pthread_attr_setstack.3:83 build/C/man3/pthread_attr_setstackaddr.3:71 build/C/man3/pthread_attr_setstacksize.3:58 build/C/man3/pthread_cancel.3:106 build/C/man3/pthread_cleanup_push.3:116 build/C/man3/pthread_create.3:113 build/C/man3/pthread_detach.3:47 build/C/man3/pthread_equal.3:38 build/C/man3/pthread_exit.3:68 build/C/man3/pthread_getattr_np.3:70 build/C/man3/pthread_getcpuclockid.3:43 build/C/man3/pthread_join.3:68 build/C/man3/pthread_kill.3:50 build/C/man3/pthread_self.3:43 build/C/man3/pthread_setaffinity_np.3:74 build/C/man3/pthread_setcancelstate.3:89 build/C/man3/pthread_setconcurrency.3:53 build/C/man3/pthread_setschedparam.3:101 build/C/man3/pthread_setschedprio.3:50 build/C/man3/pthread_sigmask.3:47 build/C/man3/pthread_sigqueue.3:63 build/C/man3/pthread_testcancel.3:47 build/C/man3/pthread_tryjoin_np.3:83 build/C/man3/pthread_yield.3:41
170 #, no-wrap
171 msgid "RETURN VALUE"
172 msgstr ""
173
174 #. type: Plain text
175 #: build/C/man2/getcontext.2:122
176 msgid ""
177 "When successful, B<getcontext>()  returns 0 and B<setcontext>()  does not "
178 "return.  On error, both return -1 and set I<errno> appropriately."
179 msgstr ""
180
181 #. type: SH
182 #: build/C/man2/getcontext.2:122 build/C/man3/makecontext.3:93 build/C/man3/pthread_attr_init.3:68 build/C/man3/pthread_attr_setaffinity_np.3:76 build/C/man3/pthread_attr_setdetachstate.3:77 build/C/man3/pthread_attr_setguardsize.3:90 build/C/man3/pthread_attr_setinheritsched.3:84 build/C/man3/pthread_attr_setschedparam.3:74 build/C/man3/pthread_attr_setschedpolicy.3:72 build/C/man3/pthread_attr_setscope.3:91 build/C/man3/pthread_attr_setstack.3:86 build/C/man3/pthread_attr_setstackaddr.3:74 build/C/man3/pthread_attr_setstacksize.3:61 build/C/man3/pthread_cancel.3:111 build/C/man3/pthread_cleanup_push.3:118 build/C/man3/pthread_create.3:120 build/C/man3/pthread_detach.3:52 build/C/man3/pthread_equal.3:42 build/C/man3/pthread_exit.3:70 build/C/man3/pthread_getattr_np.3:73 build/C/man3/pthread_getcpuclockid.3:46 build/C/man3/pthread_join.3:73 build/C/man3/pthread_kill.3:55 build/C/man3/pthread_self.3:45 build/C/man3/pthread_setaffinity_np.3:77 build/C/man3/pthread_setcancelstate.3:92 build/C/man3/pthread_setconcurrency.3:65 build/C/man3/pthread_setschedparam.3:109 build/C/man3/pthread_setschedprio.3:58 build/C/man3/pthread_sigmask.3:52 build/C/man3/pthread_sigqueue.3:68 build/C/man3/pthread_testcancel.3:51 build/C/man3/pthread_tryjoin_np.3:87 build/C/man3/pthread_yield.3:46
183 #, no-wrap
184 msgid "ERRORS"
185 msgstr ""
186
187 #. type: Plain text
188 #: build/C/man2/getcontext.2:124
189 msgid "None defined."
190 msgstr ""
191
192 #. type: SH
193 #: build/C/man2/getcontext.2:124 build/C/man3/makecontext.3:102 build/C/man3/pthread_attr_init.3:76 build/C/man3/pthread_attr_setaffinity_np.3:105 build/C/man3/pthread_attr_setdetachstate.3:84 build/C/man3/pthread_attr_setguardsize.3:103 build/C/man3/pthread_attr_setinheritsched.3:98 build/C/man3/pthread_attr_setschedparam.3:86 build/C/man3/pthread_attr_setschedpolicy.3:86 build/C/man3/pthread_attr_setscope.3:104 build/C/man3/pthread_attr_setstack.3:110 build/C/man3/pthread_attr_setstackaddr.3:80 build/C/man3/pthread_attr_setstacksize.3:80 build/C/man3/pthread_cancel.3:119 build/C/man3/pthread_cleanup_push.3:122 build/C/man3/pthread_cleanup_push_defer_np.3:98 build/C/man3/pthread_create.3:144 build/C/man3/pthread_detach.3:62 build/C/man3/pthread_equal.3:44 build/C/man3/pthread_exit.3:72 build/C/man3/pthread_getattr_np.3:95 build/C/man3/pthread_getcpuclockid.3:62 build/C/man3/pthread_join.3:96 build/C/man3/pthread_kill.3:64 build/C/man3/pthread_kill_other_threads_np.3:45 build/C/man3/pthread_self.3:47 build/C/man3/pthread_setaffinity_np.3:118 build/C/man3/pthread_setcancelstate.3:110 build/C/man3/pthread_setconcurrency.3:80 build/C/man3/pthread_setschedparam.3:138 build/C/man3/pthread_setschedprio.3:80 build/C/man3/pthread_sigmask.3:55 build/C/man3/pthread_sigqueue.3:91 build/C/man3/pthread_testcancel.3:55 build/C/man3/pthread_tryjoin_np.3:110 build/C/man3/pthread_yield.3:50
194 #, no-wrap
195 msgid "CONFORMING TO"
196 msgstr ""
197
198 #. type: Plain text
199 #: build/C/man2/getcontext.2:130
200 msgid ""
201 "SUSv2, POSIX.1-2001.  POSIX.1-2008 removes the specification of "
202 "B<getcontext>(), citing portability issues, and recommending that "
203 "applications be rewritten to use POSIX threads instead."
204 msgstr ""
205
206 #. type: SH
207 #: build/C/man2/getcontext.2:130 build/C/man3/makecontext.3:110 build/C/man3/pthread_attr_init.3:78 build/C/man3/pthread_attr_setaffinity_np.3:108 build/C/man3/pthread_attr_setdetachstate.3:86 build/C/man3/pthread_attr_setguardsize.3:105 build/C/man3/pthread_attr_setschedparam.3:91 build/C/man3/pthread_attr_setscope.3:106 build/C/man3/pthread_attr_setstack.3:112 build/C/man3/pthread_attr_setstackaddr.3:83 build/C/man3/pthread_attr_setstacksize.3:85 build/C/man3/pthread_cancel.3:121 build/C/man3/pthread_cleanup_push.3:124 build/C/man3/pthread_create.3:146 build/C/man3/pthread_detach.3:64 build/C/man3/pthread_equal.3:46 build/C/man3/pthread_exit.3:74 build/C/man3/pthread_getcpuclockid.3:64 build/C/man3/pthread_join.3:98 build/C/man3/pthread_kill.3:66 build/C/man3/pthread_kill_other_threads_np.3:48 build/C/man3/pthread_self.3:49 build/C/man3/pthread_setaffinity_np.3:121 build/C/man3/pthread_setcancelstate.3:112 build/C/man3/pthread_setconcurrency.3:82 build/C/man3/pthread_setschedparam.3:140 build/C/man3/pthread_setschedprio.3:82 build/C/man3/pthread_sigmask.3:57 build/C/man3/pthread_yield.3:56
208 #, no-wrap
209 msgid "NOTES"
210 msgstr ""
211
212 #. type: Plain text
213 #: build/C/man2/getcontext.2:147
214 msgid ""
215 "The earliest incarnation of this mechanism was the "
216 "B<setjmp>(3)/B<longjmp>(3)  mechanism.  Since that does not define the "
217 "handling of the signal context, the next stage was the "
218 "B<sigsetjmp>(3)/B<siglongjmp>(3)  pair.  The present mechanism gives much "
219 "more control.  On the other hand, there is no easy way to detect whether a "
220 "return from B<getcontext>()  is from the first call, or via a "
221 "B<setcontext>()  call.  The user has to invent her own bookkeeping device, "
222 "and a register variable won't do since registers are restored."
223 msgstr ""
224
225 #. type: Plain text
226 #: build/C/man2/getcontext.2:158
227 msgid ""
228 "When a signal occurs, the current user context is saved and a new context is "
229 "created by the kernel for the signal handler.  Do not leave the handler "
230 "using B<longjmp>(3): it is undefined what would happen with contexts.  Use "
231 "B<siglongjmp>(3)  or B<setcontext>()  instead."
232 msgstr ""
233
234 #. type: SH
235 #: build/C/man2/getcontext.2:158 build/C/man3/makecontext.3:217 build/C/man3/pthread_attr_init.3:294 build/C/man3/pthread_attr_setaffinity_np.3:115 build/C/man3/pthread_attr_setdetachstate.3:108 build/C/man3/pthread_attr_setguardsize.3:155 build/C/man3/pthread_attr_setinheritsched.3:119 build/C/man3/pthread_attr_setschedparam.3:95 build/C/man3/pthread_attr_setschedpolicy.3:91 build/C/man3/pthread_attr_setscope.3:117 build/C/man3/pthread_attr_setstack.3:154 build/C/man3/pthread_attr_setstackaddr.3:107 build/C/man3/pthread_attr_setstacksize.3:108 build/C/man3/pthread_cancel.3:220 build/C/man3/pthread_cleanup_push.3:308 build/C/man3/pthread_cleanup_push_defer_np.3:101 build/C/man3/pthread_create.3:367 build/C/man3/pthread_detach.3:95 build/C/man3/pthread_equal.3:53 build/C/man3/pthread_exit.3:102 build/C/man3/pthread_getattr_np.3:342 build/C/man3/pthread_getcpuclockid.3:166 build/C/man3/pthread_join.3:125 build/C/man3/pthread_kill.3:73 build/C/man3/pthread_kill_other_threads_np.3:64 build/C/man3/pthread_self.3:73 build/C/man3/pthread_setaffinity_np.3:203 build/C/man3/pthread_setcancelstate.3:174 build/C/man3/pthread_setconcurrency.3:97 build/C/man3/pthread_setschedparam.3:428 build/C/man3/pthread_setschedprio.3:88 build/C/man3/pthread_sigmask.3:133 build/C/man3/pthread_sigqueue.3:93 build/C/man3/pthread_testcancel.3:60 build/C/man3/pthread_tryjoin_np.3:133 build/C/man3/pthread_yield.3:59 build/C/man7/pthreads.7:893
236 #, no-wrap
237 msgid "SEE ALSO"
238 msgstr ""
239
240 #. type: Plain text
241 #: build/C/man2/getcontext.2:165
242 msgid ""
243 "B<sigaction>(2), B<sigaltstack>(2), B<sigprocmask>(2), B<longjmp>(3), "
244 "B<makecontext>(3), B<sigsetjmp>(3)"
245 msgstr ""
246
247 #. type: SH
248 #: build/C/man2/getcontext.2:165 build/C/man3/makecontext.3:223 build/C/man3/pthread_attr_init.3:308 build/C/man3/pthread_attr_setaffinity_np.3:121 build/C/man3/pthread_attr_setdetachstate.3:114 build/C/man3/pthread_attr_setguardsize.3:163 build/C/man3/pthread_attr_setinheritsched.3:128 build/C/man3/pthread_attr_setschedparam.3:105 build/C/man3/pthread_attr_setschedpolicy.3:100 build/C/man3/pthread_attr_setscope.3:125 build/C/man3/pthread_attr_setstack.3:164 build/C/man3/pthread_attr_setstackaddr.3:113 build/C/man3/pthread_attr_setstacksize.3:115 build/C/man3/pthread_cancel.3:230 build/C/man3/pthread_cleanup_push.3:314 build/C/man3/pthread_cleanup_push_defer_np.3:107 build/C/man3/pthread_create.3:378 build/C/man3/pthread_detach.3:102 build/C/man3/pthread_equal.3:57 build/C/man3/pthread_exit.3:106 build/C/man3/pthread_getattr_np.3:356 build/C/man3/pthread_getcpuclockid.3:174 build/C/man3/pthread_join.3:132 build/C/man3/pthread_kill.3:82 build/C/man3/pthread_kill_other_threads_np.3:70 build/C/man3/pthread_self.3:77 build/C/man3/pthread_setaffinity_np.3:211 build/C/man3/pthread_setcancelstate.3:179 build/C/man3/pthread_setconcurrency.3:100 build/C/man3/pthread_setschedparam.3:440 build/C/man3/pthread_setschedprio.3:100 build/C/man3/pthread_sigmask.3:142 build/C/man3/pthread_sigqueue.3:101 build/C/man3/pthread_testcancel.3:65 build/C/man3/pthread_tryjoin_np.3:138 build/C/man3/pthread_yield.3:63 build/C/man7/pthreads.7:927
249 #, no-wrap
250 msgid "COLOPHON"
251 msgstr ""
252
253 #. type: Plain text
254 #: build/C/man2/getcontext.2:172 build/C/man3/makecontext.3:230 build/C/man3/pthread_attr_init.3:315 build/C/man3/pthread_attr_setaffinity_np.3:128 build/C/man3/pthread_attr_setdetachstate.3:121 build/C/man3/pthread_attr_setguardsize.3:170 build/C/man3/pthread_attr_setinheritsched.3:135 build/C/man3/pthread_attr_setschedparam.3:112 build/C/man3/pthread_attr_setschedpolicy.3:107 build/C/man3/pthread_attr_setscope.3:132 build/C/man3/pthread_attr_setstack.3:171 build/C/man3/pthread_attr_setstackaddr.3:120 build/C/man3/pthread_attr_setstacksize.3:122 build/C/man3/pthread_cancel.3:237 build/C/man3/pthread_cleanup_push.3:321 build/C/man3/pthread_cleanup_push_defer_np.3:114 build/C/man3/pthread_create.3:385 build/C/man3/pthread_detach.3:109 build/C/man3/pthread_equal.3:64 build/C/man3/pthread_exit.3:113 build/C/man3/pthread_getattr_np.3:363 build/C/man3/pthread_getcpuclockid.3:181 build/C/man3/pthread_join.3:139 build/C/man3/pthread_kill.3:89 build/C/man3/pthread_kill_other_threads_np.3:77 build/C/man3/pthread_self.3:84 build/C/man3/pthread_setaffinity_np.3:218 build/C/man3/pthread_setcancelstate.3:186 build/C/man3/pthread_setconcurrency.3:107 build/C/man3/pthread_setschedparam.3:447 build/C/man3/pthread_setschedprio.3:107 build/C/man3/pthread_sigmask.3:149 build/C/man3/pthread_sigqueue.3:108 build/C/man3/pthread_testcancel.3:72 build/C/man3/pthread_tryjoin_np.3:145 build/C/man3/pthread_yield.3:70 build/C/man7/pthreads.7:934
255 msgid ""
256 "This page is part of release 3.37 of the Linux I<man-pages> project.  A "
257 "description of the project, and information about reporting bugs, can be "
258 "found at http://www.kernel.org/doc/man-pages/."
259 msgstr ""
260
261 #. type: TH
262 #: build/C/man3/makecontext.3:25
263 #, no-wrap
264 msgid "MAKECONTEXT"
265 msgstr ""
266
267 #. type: TH
268 #: build/C/man3/makecontext.3:25
269 #, no-wrap
270 msgid "2009-03-31"
271 msgstr ""
272
273 #. type: TH
274 #: build/C/man3/makecontext.3:25
275 #, no-wrap
276 msgid "GNU"
277 msgstr ""
278
279 #. type: Plain text
280 #: build/C/man3/makecontext.3:28
281 msgid "makecontext, swapcontext - manipulate user context"
282 msgstr ""
283
284 #. type: Plain text
285 #: build/C/man3/makecontext.3:33
286 msgid ""
287 "B<void makecontext(ucontext_t *>I<ucp>B<, void (*>I<func>B<)(),> B<int "
288 ">I<argc>B<, ...);>"
289 msgstr ""
290
291 #. type: Plain text
292 #: build/C/man3/makecontext.3:35
293 msgid "B<int swapcontext(ucontext_t *>I<oucp>B<, ucontext_t *>I<ucp>B<);>"
294 msgstr ""
295
296 #. type: Plain text
297 #: build/C/man3/makecontext.3:46
298 msgid ""
299 "In a System V-like environment, one has the type I<ucontext_t> defined in "
300 "I<E<lt>ucontext.hE<gt>> and the four functions B<getcontext>(2), "
301 "B<setcontext>(2), B<makecontext>()  and B<swapcontext>()  that allow "
302 "user-level context switching between multiple threads of control within a "
303 "process."
304 msgstr ""
305
306 #. type: Plain text
307 #: build/C/man3/makecontext.3:49
308 msgid "For the type and the first two functions, see B<getcontext>(2)."
309 msgstr ""
310
311 #. type: Plain text
312 #: build/C/man3/makecontext.3:61
313 msgid ""
314 "The B<makecontext>()  function modifies the context pointed to by I<ucp> "
315 "(which was obtained from a call to B<getcontext>(2)).  Before invoking "
316 "B<makecontext>(), the caller must allocate a new stack for this context and "
317 "assign its address to I<ucp-E<gt>uc_stack>, and define a successor context "
318 "and assign its address to I<ucp-E<gt>uc_link>."
319 msgstr ""
320
321 #. type: Plain text
322 #: build/C/man3/makecontext.3:75
323 msgid ""
324 "When this context is later activated (using B<setcontext>(2)  or "
325 "B<swapcontext>())  the function I<func> is called, and passed the series of "
326 "integer (I<int>)  arguments that follow I<argc>; the caller must specify the "
327 "number of these arguments in I<argc>.  When this function returns, the "
328 "successor context is activated.  If the successor context pointer is NULL, "
329 "the thread exits."
330 msgstr ""
331
332 #. type: Plain text
333 #: build/C/man3/makecontext.3:81
334 msgid ""
335 "The B<swapcontext>()  function saves the current context in the structure "
336 "pointed to by I<oucp>, and then activates the context pointed to by I<ucp>."
337 msgstr ""
338
339 #. type: Plain text
340 #: build/C/man3/makecontext.3:93
341 msgid ""
342 "When successful, B<swapcontext>()  does not return.  (But we may return "
343 "later, in case I<oucp> is activated, in which case it looks like "
344 "B<swapcontext>()  returns 0.)  On error, B<swapcontext>()  returns -1 and "
345 "sets I<errno> appropriately."
346 msgstr ""
347
348 #. type: TP
349 #: build/C/man3/makecontext.3:94 build/C/man3/pthread_attr_setaffinity_np.3:99 build/C/man3/pthread_getattr_np.3:74
350 #, no-wrap
351 msgid "B<ENOMEM>"
352 msgstr ""
353
354 #. type: Plain text
355 #: build/C/man3/makecontext.3:97
356 msgid "Insufficient stack space left."
357 msgstr ""
358
359 #. type: SH
360 #: build/C/man3/makecontext.3:97 build/C/man3/pthread_attr_setaffinity_np.3:103 build/C/man3/pthread_attr_setguardsize.3:101 build/C/man3/pthread_attr_setstack.3:108 build/C/man3/pthread_attr_setstackaddr.3:78 build/C/man3/pthread_attr_setstacksize.3:78 build/C/man3/pthread_getattr_np.3:93 build/C/man3/pthread_getcpuclockid.3:60 build/C/man3/pthread_setaffinity_np.3:116 build/C/man3/pthread_setconcurrency.3:78 build/C/man3/pthread_setschedprio.3:78 build/C/man3/pthread_sigqueue.3:87 build/C/man3/pthread_tryjoin_np.3:108
361 #, no-wrap
362 msgid "VERSIONS"
363 msgstr ""
364
365 #. type: Plain text
366 #: build/C/man3/makecontext.3:102
367 msgid ""
368 "B<makecontext>()  and B<swapcontext>()  are provided in glibc since version "
369 "2.1."
370 msgstr ""
371
372 #. type: Plain text
373 #: build/C/man3/makecontext.3:110
374 msgid ""
375 "SUSv2, POSIX.1-2001.  POSIX.1-2008 removes the specifications of "
376 "B<makecontext>()  and B<swapcontext>(), citing portability issues, and "
377 "recommending that applications be rewritten to use POSIX threads instead."
378 msgstr ""
379
380 #. type: Plain text
381 #: build/C/man3/makecontext.3:118
382 msgid ""
383 "The interpretation of I<ucp-E<gt>uc_stack> is just as in B<sigaltstack>(2), "
384 "namely, this struct contains the start and length of a memory area to be "
385 "used as the stack, regardless of the direction of growth of the stack.  "
386 "Thus, it is not necessary for the user program to worry about this "
387 "direction."
388 msgstr ""
389
390 #. type: Plain text
391 #: build/C/man3/makecontext.3:134
392 msgid ""
393 "On architectures where I<int> and pointer types are the same size (e.g., "
394 "x86-32, where both types are 32 bits), you may be able to get away with "
395 "passing pointers as arguments to B<makecontext>()  following I<argc>.  "
396 "However, doing this is not guaranteed to be portable, is undefined according "
397 "to the standards, and won't work on architectures where pointers are larger "
398 "than I<int>s.  Nevertheless, starting with version 2.8, glibc makes some "
399 "changes to B<makecontext>(), to permit this on some 64-bit architectures "
400 "(e.g., x86-64)."
401 msgstr ""
402
403 #. type: SH
404 #: build/C/man3/makecontext.3:134 build/C/man3/pthread_attr_init.3:84 build/C/man3/pthread_attr_setdetachstate.3:105 build/C/man3/pthread_attr_setguardsize.3:152 build/C/man3/pthread_attr_setinheritsched.3:100 build/C/man3/pthread_attr_setschedparam.3:88 build/C/man3/pthread_attr_setschedpolicy.3:88 build/C/man3/pthread_attr_setstack.3:151 build/C/man3/pthread_attr_setstacksize.3:82 build/C/man3/pthread_cancel.3:129 build/C/man3/pthread_cleanup_push.3:148 build/C/man3/pthread_create.3:194 build/C/man3/pthread_detach.3:91 build/C/man3/pthread_getattr_np.3:98 build/C/man3/pthread_getcpuclockid.3:75 build/C/man3/pthread_join.3:122 build/C/man3/pthread_setaffinity_np.3:151 build/C/man3/pthread_setcancelstate.3:171 build/C/man3/pthread_setschedparam.3:146 build/C/man3/pthread_sigmask.3:59 build/C/man3/pthread_testcancel.3:57 build/C/man3/pthread_tryjoin_np.3:113
405 #, no-wrap
406 msgid "EXAMPLE"
407 msgstr ""
408
409 #. type: Plain text
410 #: build/C/man3/makecontext.3:142
411 msgid ""
412 "The example program below demonstrates the use of B<getcontext>(2), "
413 "B<makecontext>(), and B<swapcontext>().  Running the program produces the "
414 "following output:"
415 msgstr ""
416
417 #. type: Plain text
418 #: build/C/man3/makecontext.3:154
419 #, no-wrap
420 msgid ""
421 "$B< ./a.out>\n"
422 "main: swapcontext(&uctx_main, &uctx_func2)\n"
423 "func2: started\n"
424 "func2: swapcontext(&uctx_func2, &uctx_func1)\n"
425 "func1: started\n"
426 "func1: swapcontext(&uctx_func1, &uctx_func2)\n"
427 "func2: returning\n"
428 "func1: returning\n"
429 "main: exiting\n"
430 msgstr ""
431
432 #. type: SS
433 #: build/C/man3/makecontext.3:156 build/C/man3/pthread_attr_init.3:145 build/C/man3/pthread_cancel.3:145 build/C/man3/pthread_cleanup_push.3:224 build/C/man3/pthread_create.3:233 build/C/man3/pthread_getattr_np.3:176 build/C/man3/pthread_getcpuclockid.3:92 build/C/man3/pthread_setschedparam.3:221 build/C/man3/pthread_sigmask.3:77
434 #, no-wrap
435 msgid "Program source"
436 msgstr ""
437
438 #. type: Plain text
439 #: build/C/man3/makecontext.3:162
440 #, no-wrap
441 msgid ""
442 "#include E<lt>ucontext.hE<gt>\n"
443 "#include E<lt>stdio.hE<gt>\n"
444 "#include E<lt>stdlib.hE<gt>\n"
445 msgstr ""
446
447 #. type: Plain text
448 #: build/C/man3/makecontext.3:164
449 #, no-wrap
450 msgid "static ucontext_t uctx_main, uctx_func1, uctx_func2;\n"
451 msgstr ""
452
453 #. type: Plain text
454 #: build/C/man3/makecontext.3:167
455 #, no-wrap
456 msgid ""
457 "#define handle_error(msg) \\e\n"
458 "    do { perror(msg); exit(EXIT_FAILURE); } while (0)\n"
459 msgstr ""
460
461 #. type: Plain text
462 #: build/C/man3/makecontext.3:177
463 #, no-wrap
464 msgid ""
465 "static void\n"
466 "func1(void)\n"
467 "{\n"
468 "    printf(\"func1: started\\en\");\n"
469 "    printf(\"func1: swapcontext(&uctx_func1, &uctx_func2)\\en\");\n"
470 "    if (swapcontext(&uctx_func1, &uctx_func2) == -1)\n"
471 "        handle_error(\"swapcontext\");\n"
472 "    printf(\"func1: returning\\en\");\n"
473 "}\n"
474 msgstr ""
475
476 #. type: Plain text
477 #: build/C/man3/makecontext.3:187
478 #, no-wrap
479 msgid ""
480 "static void\n"
481 "func2(void)\n"
482 "{\n"
483 "    printf(\"func2: started\\en\");\n"
484 "    printf(\"func2: swapcontext(&uctx_func2, &uctx_func1)\\en\");\n"
485 "    if (swapcontext(&uctx_func2, &uctx_func1) == -1)\n"
486 "        handle_error(\"swapcontext\");\n"
487 "    printf(\"func2: returning\\en\");\n"
488 "}\n"
489 msgstr ""
490
491 #. type: Plain text
492 #: build/C/man3/makecontext.3:193
493 #, no-wrap
494 msgid ""
495 "int\n"
496 "main(int argc, char *argv[])\n"
497 "{\n"
498 "    char func1_stack[16384];\n"
499 "    char func2_stack[16384];\n"
500 msgstr ""
501
502 #. type: Plain text
503 #: build/C/man3/makecontext.3:200
504 #, no-wrap
505 msgid ""
506 "    if (getcontext(&uctx_func1) == -1)\n"
507 "        handle_error(\"getcontext\");\n"
508 "    uctx_func1.uc_stack.ss_sp = func1_stack;\n"
509 "    uctx_func1.uc_stack.ss_size = sizeof(func1_stack);\n"
510 "    uctx_func1.uc_link = &uctx_main;\n"
511 "    makecontext(&uctx_func1, func1, 0);\n"
512 msgstr ""
513
514 #. type: Plain text
515 #: build/C/man3/makecontext.3:208
516 #, no-wrap
517 msgid ""
518 "    if (getcontext(&uctx_func2) == -1)\n"
519 "        handle_error(\"getcontext\");\n"
520 "    uctx_func2.uc_stack.ss_sp = func2_stack;\n"
521 "    uctx_func2.uc_stack.ss_size = sizeof(func2_stack);\n"
522 "    /* Successor context is f1(), unless argc E<gt> 1 */\n"
523 "    uctx_func2.uc_link = (argc E<gt> 1) ? NULL : &uctx_func1;\n"
524 "    makecontext(&uctx_func2, func2, 0);\n"
525 msgstr ""
526
527 #. type: Plain text
528 #: build/C/man3/makecontext.3:212
529 #, no-wrap
530 msgid ""
531 "    printf(\"main: swapcontext(&uctx_main, &uctx_func2)\\en\");\n"
532 "    if (swapcontext(&uctx_main, &uctx_func2) == -1)\n"
533 "        handle_error(\"swapcontext\");\n"
534 msgstr ""
535
536 #. type: Plain text
537 #: build/C/man3/makecontext.3:216
538 #, no-wrap
539 msgid ""
540 "    printf(\"main: exiting\\en\");\n"
541 "    exit(EXIT_SUCCESS);\n"
542 "}\n"
543 msgstr ""
544
545 #. type: Plain text
546 #: build/C/man3/makecontext.3:223
547 msgid ""
548 "B<getcontext>(2), B<sigaction>(2), B<sigaltstack>(2), B<sigprocmask>(2), "
549 "B<sigsetjmp>(3)"
550 msgstr ""
551
552 #. type: TH
553 #: build/C/man3/pthread_attr_init.3:24
554 #, no-wrap
555 msgid "PTHREAD_ATTR_INIT"
556 msgstr ""
557
558 #. type: TH
559 #: build/C/man3/pthread_attr_init.3:24 build/C/man3/pthread_create.3:24
560 #, no-wrap
561 msgid "2008-11-11"
562 msgstr ""
563
564 #. type: Plain text
565 #: build/C/man3/pthread_attr_init.3:28
566 msgid ""
567 "pthread_attr_init, pthread_attr_destroy - initialize and destroy thread "
568 "attributes object"
569 msgstr ""
570
571 #. type: Plain text
572 #: build/C/man3/pthread_attr_init.3:31 build/C/man3/pthread_attr_setdetachstate.3:31 build/C/man3/pthread_attr_setguardsize.3:31 build/C/man3/pthread_attr_setinheritsched.3:31 build/C/man3/pthread_attr_setschedparam.3:31 build/C/man3/pthread_attr_setschedpolicy.3:31 build/C/man3/pthread_attr_setscope.3:31 build/C/man3/pthread_attr_setstack.3:31 build/C/man3/pthread_attr_setstackaddr.3:31 build/C/man3/pthread_attr_setstacksize.3:31 build/C/man3/pthread_cancel.3:30 build/C/man3/pthread_cleanup_push.3:31 build/C/man3/pthread_cleanup_push_defer_np.3:31 build/C/man3/pthread_create.3:30 build/C/man3/pthread_detach.3:30 build/C/man3/pthread_equal.3:30 build/C/man3/pthread_exit.3:30 build/C/man3/pthread_join.3:30 build/C/man3/pthread_kill_other_threads_np.3:30 build/C/man3/pthread_self.3:30 build/C/man3/pthread_setcancelstate.3:31 build/C/man3/pthread_setconcurrency.3:30 build/C/man3/pthread_setschedparam.3:31 build/C/man3/pthread_setschedprio.3:30 build/C/man3/pthread_sigqueue.3:29 build/C/man3/pthread_testcancel.3:30 build/C/man3/pthread_yield.3:29
573 #, no-wrap
574 msgid "B<#include E<lt>pthread.hE<gt>>\n"
575 msgstr ""
576
577 #. type: Plain text
578 #: build/C/man3/pthread_attr_init.3:34
579 #, no-wrap
580 msgid ""
581 "B<int pthread_attr_init(pthread_attr_t *>I<attr>B<);>\n"
582 "B<int pthread_attr_destroy(pthread_attr_t *>I<attr>B<);>\n"
583 msgstr ""
584
585 #. type: Plain text
586 #: build/C/man3/pthread_attr_init.3:36 build/C/man3/pthread_attr_setaffinity_np.3:39 build/C/man3/pthread_attr_setdetachstate.3:38 build/C/man3/pthread_attr_setguardsize.3:38 build/C/man3/pthread_attr_setinheritsched.3:38 build/C/man3/pthread_attr_setschedparam.3:38 build/C/man3/pthread_attr_setschedpolicy.3:38 build/C/man3/pthread_attr_setscope.3:38 build/C/man3/pthread_attr_setstack.3:38 build/C/man3/pthread_attr_setstackaddr.3:38 build/C/man3/pthread_attr_setstacksize.3:38 build/C/man3/pthread_cancel.3:34 build/C/man3/pthread_cleanup_push.3:37 build/C/man3/pthread_cleanup_push_defer_np.3:37 build/C/man3/pthread_equal.3:34 build/C/man3/pthread_exit.3:34 build/C/man3/pthread_getattr_np.3:35 build/C/man3/pthread_getcpuclockid.3:35 build/C/man3/pthread_self.3:34 build/C/man3/pthread_setaffinity_np.3:39 build/C/man3/pthread_setcancelstate.3:36 build/C/man3/pthread_setconcurrency.3:35 build/C/man3/pthread_setschedparam.3:38 build/C/man3/pthread_setschedprio.3:34 build/C/man3/pthread_testcancel.3:34
587 #, no-wrap
588 msgid "Compile and link with I<-pthread>.\n"
589 msgstr ""
590
591 #. type: Plain text
592 #: build/C/man3/pthread_attr_init.3:47
593 msgid ""
594 "The B<pthread_attr_init>()  function initializes the thread attributes "
595 "object pointed to by I<attr> with default attribute values.  After this "
596 "call, individual attributes of the object can be set using various related "
597 "functions (listed under SEE ALSO), and then the object can be used in one or "
598 "more B<pthread_create>(3)  calls that create threads."
599 msgstr ""
600
601 #. type: Plain text
602 #: build/C/man3/pthread_attr_init.3:52
603 msgid ""
604 "Calling B<pthread_attr_init>()  on a thread attributes object that has "
605 "already been initialized results in undefined behavior."
606 msgstr ""
607
608 #. type: Plain text
609 #: build/C/man3/pthread_attr_init.3:59
610 msgid ""
611 "When a thread attributes object is no longer required, it should be "
612 "destroyed using the B<pthread_attr_destroy>()  function.  Destroying a "
613 "thread attributes object has no effect on threads that were created using "
614 "that object."
615 msgstr ""
616
617 #. type: Plain text
618 #: build/C/man3/pthread_attr_init.3:65
619 msgid ""
620 "Once a thread attributes object has been destroyed, it can be reinitialized "
621 "using B<pthread_attr_init>().  Any other use of a destroyed thread "
622 "attributes object has undefined results."
623 msgstr ""
624
625 #. type: Plain text
626 #: build/C/man3/pthread_attr_init.3:68 build/C/man3/pthread_attr_setaffinity_np.3:76 build/C/man3/pthread_attr_setdetachstate.3:77 build/C/man3/pthread_attr_setguardsize.3:90 build/C/man3/pthread_attr_setinheritsched.3:84 build/C/man3/pthread_attr_setschedparam.3:74 build/C/man3/pthread_attr_setschedpolicy.3:72 build/C/man3/pthread_attr_setscope.3:91 build/C/man3/pthread_attr_setstack.3:86 build/C/man3/pthread_attr_setstackaddr.3:74 build/C/man3/pthread_attr_setstacksize.3:61 build/C/man3/pthread_setaffinity_np.3:77 build/C/man3/pthread_setcancelstate.3:92
627 msgid ""
628 "On success, these functions return 0; on error, they return a nonzero error "
629 "number."
630 msgstr ""
631
632 #. type: Plain text
633 #: build/C/man3/pthread_attr_init.3:76
634 msgid ""
635 "POSIX.1-2001 documents an B<ENOMEM> error for B<pthread_attr_init>(); on "
636 "Linux these functions always succeed (but portable and future-proof "
637 "applications should nevertheless handle a possible error return)."
638 msgstr ""
639
640 #. type: Plain text
641 #: build/C/man3/pthread_attr_init.3:78 build/C/man3/pthread_attr_setdetachstate.3:86 build/C/man3/pthread_attr_setguardsize.3:105 build/C/man3/pthread_attr_setinheritsched.3:100 build/C/man3/pthread_attr_setschedparam.3:88 build/C/man3/pthread_attr_setschedpolicy.3:88 build/C/man3/pthread_attr_setscope.3:106 build/C/man3/pthread_attr_setstack.3:112 build/C/man3/pthread_attr_setstacksize.3:82 build/C/man3/pthread_cancel.3:121 build/C/man3/pthread_cleanup_push.3:124 build/C/man3/pthread_create.3:146 build/C/man3/pthread_detach.3:64 build/C/man3/pthread_equal.3:46 build/C/man3/pthread_exit.3:74 build/C/man3/pthread_getcpuclockid.3:64 build/C/man3/pthread_join.3:98 build/C/man3/pthread_kill.3:66 build/C/man3/pthread_self.3:49 build/C/man3/pthread_setcancelstate.3:112 build/C/man3/pthread_setconcurrency.3:82 build/C/man3/pthread_setschedparam.3:140 build/C/man3/pthread_setschedprio.3:82 build/C/man3/pthread_sigmask.3:57 build/C/man3/pthread_testcancel.3:57
642 msgid "POSIX.1-2001."
643 msgstr ""
644
645 #. type: Plain text
646 #: build/C/man3/pthread_attr_init.3:84
647 msgid ""
648 "The I<pthread_attr_t> type should be treated as opaque: any access to the "
649 "object other than via pthreads functions is nonportable and produces "
650 "undefined results."
651 msgstr ""
652
653 #. type: Plain text
654 #: build/C/man3/pthread_attr_init.3:93
655 msgid ""
656 "The program below optionally makes use of B<pthread_attr_init>()  and "
657 "various related functions to initialize a thread attributes object that is "
658 "used to create a single thread.  Once created, the thread uses the "
659 "B<pthread_getattr_np>(3)  function (a nonstandard GNU extension) to retrieve "
660 "the thread's attributes, and then displays those attributes."
661 msgstr ""
662
663 #. type: Plain text
664 #: build/C/man3/pthread_attr_init.3:102
665 msgid ""
666 "If the program is run with no command-line argument, then it passes NULL as "
667 "the I<attr> argument of B<pthread_create>(3), so that the thread is created "
668 "with default attributes.  Running the program on Linux/x86-32 with the NPTL "
669 "threading implementation, we see the following:"
670 msgstr ""
671
672 #.  Results from glibc 2.8, SUSE 11.0; Oct 2008
673 #. type: Plain text
674 #: build/C/man3/pthread_attr_init.3:118
675 #, no-wrap
676 msgid ""
677 "$B< ulimit -s>       # No stack imit ==E<gt> default stack size is 2MB\n"
678 "unlimited\n"
679 "$B< ./a.out>\n"
680 "Thread attributes:\n"
681 "        Detach state        = PTHREAD_CREATE_JOINABLE\n"
682 "        Scope               = PTHREAD_SCOPE_SYSTEM\n"
683 "        Inherit scheduler   = PTHREAD_INHERIT_SCHED\n"
684 "        Scheduling policy   = SCHED_OTHER\n"
685 "        Scheduling priority = 0\n"
686 "        Guard size          = 4096 bytes\n"
687 "        Stack address       = 0x40196000\n"
688 "        Stack size          = 0x201000 bytes\n"
689 msgstr ""
690
691 #. type: Plain text
692 #: build/C/man3/pthread_attr_init.3:128
693 msgid ""
694 "When we supply a stack size as a command-line argument, the program "
695 "initializes a thread attributes object, sets various attributes in that "
696 "object, and passes a pointer to the object in the call to "
697 "B<pthread_create>(3).  Running the program on Linux/x86-32 with the NPTL "
698 "threading implementation, we see the following:"
699 msgstr ""
700
701 #.  Results from glibc 2.8, SUSE 11.0; Oct 2008
702 #. type: Plain text
703 #: build/C/man3/pthread_attr_init.3:143
704 #, no-wrap
705 msgid ""
706 "$B< ./a.out 0x3000000>\n"
707 "posix_memalign() allocated at 0x40197000\n"
708 "Thread attributes:\n"
709 "        Detach state        = PTHREAD_CREATE_DETACHED\n"
710 "        Scope               = PTHREAD_SCOPE_SYSTEM\n"
711 "        Inherit scheduler   = PTHREAD_EXPLICIT_SCHED\n"
712 "        Scheduling policy   = SCHED_OTHER\n"
713 "        Scheduling priority = 0\n"
714 "        Guard size          = 0 bytes\n"
715 "        Stack address       = 0x40197000\n"
716 "        Stack size          = 0x3000000 bytes\n"
717 msgstr ""
718
719 #. type: Plain text
720 #: build/C/man3/pthread_attr_init.3:154 build/C/man3/pthread_getattr_np.3:185
721 #, no-wrap
722 msgid ""
723 "#define _GNU_SOURCE     /* To get pthread_getattr_np() declaration */\n"
724 "#include E<lt>pthread.hE<gt>\n"
725 "#include E<lt>stdio.hE<gt>\n"
726 "#include E<lt>stdlib.hE<gt>\n"
727 "#include E<lt>unistd.hE<gt>\n"
728 "#include E<lt>errno.hE<gt>\n"
729 msgstr ""
730
731 #. type: Plain text
732 #: build/C/man3/pthread_attr_init.3:157 build/C/man3/pthread_cancel.3:156 build/C/man3/pthread_cleanup_push.3:236 build/C/man3/pthread_create.3:246 build/C/man3/pthread_getattr_np.3:188 build/C/man3/pthread_getcpuclockid.3:110 build/C/man3/pthread_setaffinity_np.3:169 build/C/man3/pthread_setschedparam.3:234 build/C/man3/pthread_sigmask.3:91
733 #, no-wrap
734 msgid ""
735 "#define handle_error_en(en, msg) \\e\n"
736 "        do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)\n"
737 msgstr ""
738
739 #. type: Plain text
740 #: build/C/man3/pthread_attr_init.3:165
741 #, no-wrap
742 msgid ""
743 "static void\n"
744 "display_pthread_attr(pthread_attr_t *attr, char *prefix)\n"
745 "{\n"
746 "    int s, i;\n"
747 "    size_t v;\n"
748 "    void *stkaddr;\n"
749 "    struct sched_param sp;\n"
750 msgstr ""
751
752 #. type: Plain text
753 #: build/C/man3/pthread_attr_init.3:173
754 #, no-wrap
755 msgid ""
756 "    s = pthread_attr_getdetachstate(attr, &i);\n"
757 "    if (s != 0)\n"
758 "        handle_error_en(s, \"pthread_attr_getdetachstate\");\n"
759 "    printf(\"%sDetach state        = %s\\en\", prefix,\n"
760 "            (i == PTHREAD_CREATE_DETACHED) ? \"PTHREAD_CREATE_DETACHED\" :\n"
761 "            (i == PTHREAD_CREATE_JOINABLE) ? \"PTHREAD_CREATE_JOINABLE\" :\n"
762 "            \"???\");\n"
763 msgstr ""
764
765 #. type: Plain text
766 #: build/C/man3/pthread_attr_init.3:181
767 #, no-wrap
768 msgid ""
769 "    s = pthread_attr_getscope(attr, &i);\n"
770 "    if (s != 0)\n"
771 "        handle_error_en(s, \"pthread_attr_getscope\");\n"
772 "    printf(\"%sScope               = %s\\en\", prefix,\n"
773 "            (i == PTHREAD_SCOPE_SYSTEM)  ? \"PTHREAD_SCOPE_SYSTEM\" :\n"
774 "            (i == PTHREAD_SCOPE_PROCESS) ? \"PTHREAD_SCOPE_PROCESS\" :\n"
775 "            \"???\");\n"
776 msgstr ""
777
778 #. type: Plain text
779 #: build/C/man3/pthread_attr_init.3:189
780 #, no-wrap
781 msgid ""
782 "    s = pthread_attr_getinheritsched(attr, &i);\n"
783 "    if (s != 0)\n"
784 "        handle_error_en(s, \"pthread_attr_getinheritsched\");\n"
785 "    printf(\"%sInherit scheduler   = %s\\en\", prefix,\n"
786 "            (i == PTHREAD_INHERIT_SCHED)  ? \"PTHREAD_INHERIT_SCHED\" :\n"
787 "            (i == PTHREAD_EXPLICIT_SCHED) ? \"PTHREAD_EXPLICIT_SCHED\" :\n"
788 "            \"???\");\n"
789 msgstr ""
790
791 #. type: Plain text
792 #: build/C/man3/pthread_attr_init.3:198
793 #, no-wrap
794 msgid ""
795 "    s = pthread_attr_getschedpolicy(attr, &i);\n"
796 "    if (s != 0)\n"
797 "        handle_error_en(s, \"pthread_attr_getschedpolicy\");\n"
798 "    printf(\"%sScheduling policy   = %s\\en\", prefix,\n"
799 "            (i == SCHED_OTHER) ? \"SCHED_OTHER\" :\n"
800 "            (i == SCHED_FIFO)  ? \"SCHED_FIFO\" :\n"
801 "            (i == SCHED_RR)    ? \"SCHED_RR\" :\n"
802 "            \"???\");\n"
803 msgstr ""
804
805 #. type: Plain text
806 #: build/C/man3/pthread_attr_init.3:203
807 #, no-wrap
808 msgid ""
809 "    s = pthread_attr_getschedparam(attr, &sp);\n"
810 "    if (s != 0)\n"
811 "        handle_error_en(s, \"pthread_attr_getschedparam\");\n"
812 "    printf(\"%sScheduling priority = %d\\en\", prefix, sp.sched_priority);\n"
813 msgstr ""
814
815 #. type: Plain text
816 #: build/C/man3/pthread_attr_init.3:208
817 #, no-wrap
818 msgid ""
819 "    s = pthread_attr_getguardsize(attr, &v);\n"
820 "    if (s != 0)\n"
821 "        handle_error_en(s, \"pthread_attr_getguardsize\");\n"
822 "    printf(\"%sGuard size          = %d bytes\\en\", prefix, v);\n"
823 msgstr ""
824
825 #. type: Plain text
826 #: build/C/man3/pthread_attr_init.3:215
827 #, no-wrap
828 msgid ""
829 "    s = pthread_attr_getstack(attr, &stkaddr, &v);\n"
830 "    if (s != 0)\n"
831 "        handle_error_en(s, \"pthread_attr_getstack\");\n"
832 "    printf(\"%sStack address       = %p\\en\", prefix, stkaddr);\n"
833 "    printf(\"%sStack size          = 0x%x bytes\\en\", prefix, v);\n"
834 "}\n"
835 msgstr ""
836
837 #. type: Plain text
838 #: build/C/man3/pthread_attr_init.3:221
839 #, no-wrap
840 msgid ""
841 "static void *\n"
842 "thread_start(void *arg)\n"
843 "{\n"
844 "    int s;\n"
845 "    pthread_attr_t gattr;\n"
846 msgstr ""
847
848 #. type: Plain text
849 #: build/C/man3/pthread_attr_init.3:225
850 #, no-wrap
851 msgid ""
852 "    /* pthread_getattr_np() is a non-standard GNU extension that\n"
853 "       retrieves the attributes of the thread specified in its\n"
854 "       first argument */\n"
855 msgstr ""
856
857 #. type: Plain text
858 #: build/C/man3/pthread_attr_init.3:229
859 #, no-wrap
860 msgid ""
861 "    s = pthread_getattr_np(pthread_self(), &gattr);\n"
862 "    if (s != 0)\n"
863 "        handle_error_en(s, \"pthread_getattr_np\");\n"
864 msgstr ""
865
866 #. type: Plain text
867 #: build/C/man3/pthread_attr_init.3:232
868 #, no-wrap
869 msgid ""
870 "    printf(\"Thread attributes:\\en\");\n"
871 "    display_pthread_attr(&gattr, \"\\et\");\n"
872 msgstr ""
873
874 #. type: Plain text
875 #: build/C/man3/pthread_attr_init.3:235 build/C/man3/pthread_getattr_np.3:237
876 #, no-wrap
877 msgid ""
878 "    exit(EXIT_SUCCESS);         /* Terminate all threads */\n"
879 "}\n"
880 msgstr ""
881
882 #. type: Plain text
883 #: build/C/man3/pthread_attr_init.3:243
884 #, no-wrap
885 msgid ""
886 "int\n"
887 "main(int argc, char *argv[])\n"
888 "{\n"
889 "    pthread_t thr;\n"
890 "    pthread_attr_t attr;\n"
891 "    pthread_attr_t *attrp;      /* NULL or &attr */\n"
892 "    int s;\n"
893 msgstr ""
894
895 #. type: Plain text
896 #: build/C/man3/pthread_attr_init.3:245 build/C/man3/pthread_setschedparam.3:352
897 #, no-wrap
898 msgid "    attrp = NULL;\n"
899 msgstr ""
900
901 #. type: Plain text
902 #: build/C/man3/pthread_attr_init.3:249
903 #, no-wrap
904 msgid ""
905 "    /* If a command-line argument was supplied, use it to set the\n"
906 "       stack-size attribute and set a few other thread attributes,\n"
907 "       and set attrp pointing to thread attributes object */\n"
908 msgstr ""
909
910 #. type: Plain text
911 #: build/C/man3/pthread_attr_init.3:253
912 #, no-wrap
913 msgid ""
914 "    if (argc E<gt> 1) {\n"
915 "        int stack_size;\n"
916 "        void *sp;\n"
917 msgstr ""
918
919 #. type: Plain text
920 #: build/C/man3/pthread_attr_init.3:255
921 #, no-wrap
922 msgid "        attrp = &attr;\n"
923 msgstr ""
924
925 #. type: Plain text
926 #: build/C/man3/pthread_attr_init.3:259
927 #, no-wrap
928 msgid ""
929 "        s = pthread_attr_init(&attr);\n"
930 "        if (s != 0)\n"
931 "            handle_error_en(s, \"pthread_attr_init\");\n"
932 msgstr ""
933
934 #. type: Plain text
935 #: build/C/man3/pthread_attr_init.3:263
936 #, no-wrap
937 msgid ""
938 "        s = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);\n"
939 "        if (s != 0)\n"
940 "            handle_error_en(s, \"pthread_attr_setdetachstate\");\n"
941 msgstr ""
942
943 #. type: Plain text
944 #: build/C/man3/pthread_attr_init.3:267
945 #, no-wrap
946 msgid ""
947 "        s = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);\n"
948 "        if (s != 0)\n"
949 "            handle_error_en(s, \"pthread_attr_setinheritsched\");\n"
950 msgstr ""
951
952 #. type: Plain text
953 #: build/C/man3/pthread_attr_init.3:269
954 #, no-wrap
955 msgid "        stack_size = strtoul(argv[1], NULL, 0);\n"
956 msgstr ""
957
958 #. type: Plain text
959 #: build/C/man3/pthread_attr_init.3:273
960 #, no-wrap
961 msgid ""
962 "        s = posix_memalign(&sp, sysconf(_SC_PAGESIZE), stack_size);\n"
963 "        if (s != 0)\n"
964 "            handle_error_en(s, \"posix_memalign\");\n"
965 msgstr ""
966
967 #. type: Plain text
968 #: build/C/man3/pthread_attr_init.3:275
969 #, no-wrap
970 msgid "        printf(\"posix_memalign() allocated at %p\\en\", sp);\n"
971 msgstr ""
972
973 #. type: Plain text
974 #: build/C/man3/pthread_attr_init.3:280
975 #, no-wrap
976 msgid ""
977 "        s = pthread_attr_setstack(&attr, sp, stack_size);\n"
978 "        if (s != 0)\n"
979 "            handle_error_en(s, \"pthread_attr_setstack\");\n"
980 "    }\n"
981 msgstr ""
982
983 #. type: Plain text
984 #: build/C/man3/pthread_attr_init.3:284 build/C/man3/pthread_getattr_np.3:332
985 #, no-wrap
986 msgid ""
987 "    s = pthread_create(&thr, attrp, &thread_start, NULL);\n"
988 "    if (s != 0)\n"
989 "        handle_error_en(s, \"pthread_create\");\n"
990 msgstr ""
991
992 #. type: Plain text
993 #: build/C/man3/pthread_attr_init.3:290 build/C/man3/pthread_getattr_np.3:338
994 #, no-wrap
995 msgid ""
996 "    if (attrp != NULL) {\n"
997 "        s = pthread_attr_destroy(attrp);\n"
998 "        if (s != 0)\n"
999 "            handle_error_en(s, \"pthread_attr_destroy\");\n"
1000 "    }\n"
1001 msgstr ""
1002
1003 #. type: Plain text
1004 #: build/C/man3/pthread_attr_init.3:293 build/C/man3/pthread_getattr_np.3:341
1005 #, no-wrap
1006 msgid ""
1007 "    pause();    /* Terminates when other thread calls exit() */\n"
1008 "}\n"
1009 msgstr ""
1010
1011 #. type: Plain text
1012 #: build/C/man3/pthread_attr_init.3:308
1013 msgid ""
1014 "B<pthread_attr_setaffinity_np>(3), B<pthread_attr_setdetachstate>(3), "
1015 "B<pthread_attr_setguardsize>(3), B<pthread_attr_setinheritsched>(3), "
1016 "B<pthread_attr_setschedparam>(3), B<pthread_attr_setschedpolicy>(3), "
1017 "B<pthread_attr_setscope>(3), B<pthread_attr_setstack>(3), "
1018 "B<pthread_attr_setstackaddr>(3), B<pthread_attr_setstacksize>(3), "
1019 "B<pthread_create>(3), B<pthread_getattr_np>(3), B<pthreads>(7)"
1020 msgstr ""
1021
1022 #. type: TH
1023 #: build/C/man3/pthread_attr_setaffinity_np.3:24
1024 #, no-wrap
1025 msgid "PTHREAD_ATTR_SETAFFINITY_NP"
1026 msgstr ""
1027
1028 #. type: TH
1029 #: build/C/man3/pthread_attr_setaffinity_np.3:24 build/C/man3/pthread_getattr_np.3:24 build/C/man3/pthread_setaffinity_np.3:24 build/C/man3/pthread_tryjoin_np.3:24
1030 #, no-wrap
1031 msgid "2010-09-10"
1032 msgstr ""
1033
1034 #. type: Plain text
1035 #: build/C/man3/pthread_attr_setaffinity_np.3:28
1036 msgid ""
1037 "pthread_attr_setaffinity_np, pthread_attr_getaffinity_np - set/get CPU "
1038 "affinity attribute in thread attributes object"
1039 msgstr ""
1040
1041 #. type: Plain text
1042 #: build/C/man3/pthread_attr_setaffinity_np.3:32 build/C/man3/pthread_getattr_np.3:31 build/C/man3/pthread_setaffinity_np.3:32 build/C/man3/pthread_tryjoin_np.3:32
1043 #, no-wrap
1044 msgid ""
1045 "B<#define _GNU_SOURCE>             /* See feature_test_macros(7) */\n"
1046 "B<#include E<lt>pthread.hE<gt>>\n"
1047 msgstr ""
1048
1049 #. type: Plain text
1050 #: build/C/man3/pthread_attr_setaffinity_np.3:37
1051 #, no-wrap
1052 msgid ""
1053 "B<int pthread_attr_setaffinity_np(pthread_attr_t *>I<attr>B<,>\n"
1054 "B<                   size_t >I<cpusetsize>B<, const cpu_set_t "
1055 "*>I<cpuset>B<);>\n"
1056 "B<int pthread_attr_getaffinity_np(pthread_attr_t *>I<attr>B<,>\n"
1057 "B<                   size_t >I<cpusetsize>B<, cpu_set_t *>I<cpuset>B<);>\n"
1058 msgstr ""
1059
1060 #. type: Plain text
1061 #: build/C/man3/pthread_attr_setaffinity_np.3:51
1062 msgid ""
1063 "The B<pthread_attr_setaffinity_np>()  function sets the CPU affinity mask "
1064 "attribute of the thread attributes object referred to by I<attr> to the "
1065 "value specified in I<cpuset>.  This attribute determines the CPU affinity "
1066 "mask of a thread created using the thread attributes object I<attr>."
1067 msgstr ""
1068
1069 #. type: Plain text
1070 #: build/C/man3/pthread_attr_setaffinity_np.3:60
1071 msgid ""
1072 "The B<pthread_attr_getaffinity_np>()  function returns the CPU affinity mask "
1073 "attribute of the thread attributes object referred to by I<attr> in the "
1074 "buffer pointed to by I<cpuset>."
1075 msgstr ""
1076
1077 #. type: Plain text
1078 #: build/C/man3/pthread_attr_setaffinity_np.3:67
1079 msgid ""
1080 "The argument I<cpusetsize> is the length (in bytes) of the buffer pointed to "
1081 "by I<cpuset>.  Typically, this argument would be specified as "
1082 "I<sizeof(cpu_set_t)>."
1083 msgstr ""
1084
1085 #. type: Plain text
1086 #: build/C/man3/pthread_attr_setaffinity_np.3:73 build/C/man3/pthread_setaffinity_np.3:64
1087 msgid ""
1088 "For more details on CPU affinity masks, see B<sched_setaffinity>(2).  For a "
1089 "description of a set of macros that can be used to manipulate and inspect "
1090 "CPU sets, see B<CPU_SET>(3)."
1091 msgstr ""
1092
1093 #. type: TP
1094 #: build/C/man3/pthread_attr_setaffinity_np.3:77 build/C/man3/pthread_attr_setaffinity_np.3:89 build/C/man3/pthread_attr_setdetachstate.3:80 build/C/man3/pthread_attr_setinheritsched.3:87 build/C/man3/pthread_attr_setschedpolicy.3:75 build/C/man3/pthread_attr_setscope.3:94 build/C/man3/pthread_attr_setstack.3:89 build/C/man3/pthread_attr_setstacksize.3:64 build/C/man3/pthread_create.3:135 build/C/man3/pthread_detach.3:53 build/C/man3/pthread_join.3:83 build/C/man3/pthread_join.3:87 build/C/man3/pthread_kill.3:56 build/C/man3/pthread_setaffinity_np.3:81 build/C/man3/pthread_setaffinity_np.3:90 build/C/man3/pthread_setaffinity_np.3:106 build/C/man3/pthread_setcancelstate.3:96 build/C/man3/pthread_setcancelstate.3:104 build/C/man3/pthread_setconcurrency.3:68 build/C/man3/pthread_setschedparam.3:119 build/C/man3/pthread_setschedprio.3:59 build/C/man3/pthread_sigqueue.3:75
1095 #, no-wrap
1096 msgid "B<EINVAL>"
1097 msgstr ""
1098
1099 #.  cpumask_t
1100 #.  The raw sched_getaffinity() system call returns the size (in bytes)
1101 #.  of the cpumask_t type.
1102 #. type: Plain text
1103 #: build/C/man3/pthread_attr_setaffinity_np.3:89
1104 msgid ""
1105 "(B<pthread_attr_setaffinity_np>())  I<cpuset> specified a CPU that was "
1106 "outside the set supported by the kernel.  (The kernel configuration option "
1107 "B<CONFIG_NR_CPUS> defines the range of the set supported by the kernel data "
1108 "type used to represent CPU sets.)"
1109 msgstr ""
1110
1111 #. type: Plain text
1112 #: build/C/man3/pthread_attr_setaffinity_np.3:99
1113 msgid ""
1114 "(B<pthread_attr_getaffinity_np>())  A CPU in the affinity mask of the thread "
1115 "attributes object referred to by I<attr> lies outside the range specified by "
1116 "I<cpusetsize> (i.e., I<cpuset>/I<cpusetsize> is too small)."
1117 msgstr ""
1118
1119 #. type: Plain text
1120 #: build/C/man3/pthread_attr_setaffinity_np.3:103
1121 msgid "(B<pthread_attr_setaffinity_np>())  Could not allocate memory."
1122 msgstr ""
1123
1124 #. type: Plain text
1125 #: build/C/man3/pthread_attr_setaffinity_np.3:105 build/C/man3/pthread_setaffinity_np.3:118
1126 msgid "These functions are provided by glibc since version 2.3.4."
1127 msgstr ""
1128
1129 #. type: Plain text
1130 #: build/C/man3/pthread_attr_setaffinity_np.3:108 build/C/man3/pthread_cleanup_push_defer_np.3:101 build/C/man3/pthread_setaffinity_np.3:121 build/C/man3/pthread_tryjoin_np.3:113
1131 msgid ""
1132 "These functions are nonstandard GNU extensions; hence the suffix \"_np\" "
1133 "(nonportable) in the names."
1134 msgstr ""
1135
1136 #. type: Plain text
1137 #: build/C/man3/pthread_attr_setaffinity_np.3:115 build/C/man3/pthread_setaffinity_np.3:147
1138 msgid ""
1139 "In glibc 2.3.3 only, versions of these functions were provided that did not "
1140 "have a I<cpusetsize> argument.  Instead the CPU set size given to the "
1141 "underlying system calls was always I<sizeof(cpu_set_t)>."
1142 msgstr ""
1143
1144 #. type: Plain text
1145 #: build/C/man3/pthread_attr_setaffinity_np.3:121
1146 msgid ""
1147 "B<sched_setaffinity>(2), B<pthread_attr_init>(3), "
1148 "B<pthread_setaffinity_np>(3), B<cpuset>(7), B<pthreads>(7)"
1149 msgstr ""
1150
1151 #. type: TH
1152 #: build/C/man3/pthread_attr_setdetachstate.3:24
1153 #, no-wrap
1154 msgid "PTHREAD_ATTR_SETDETACHSTATE"
1155 msgstr ""
1156
1157 #. type: TH
1158 #: build/C/man3/pthread_attr_setdetachstate.3:24 build/C/man3/pthread_attr_setschedparam.3:24 build/C/man3/pthread_attr_setschedpolicy.3:24
1159 #, no-wrap
1160 msgid "2010-02-03"
1161 msgstr ""
1162
1163 #. type: Plain text
1164 #: build/C/man3/pthread_attr_setdetachstate.3:28
1165 msgid ""
1166 "pthread_attr_setdetachstate, pthread_attr_getdetachstate - set/get detach "
1167 "state attribute in thread attributes object"
1168 msgstr ""
1169
1170 #. type: Plain text
1171 #: build/C/man3/pthread_attr_setdetachstate.3:36
1172 #, no-wrap
1173 msgid ""
1174 "B<int pthread_attr_setdetachstate(pthread_attr_t *>I<attr>B<, int "
1175 ">I<detachstate>B<);>\n"
1176 "B<int pthread_attr_getdetachstate(pthread_attr_t *>I<attr>B<, int "
1177 "*>I<detachstate>B<);>\n"
1178 msgstr ""
1179
1180 #. type: Plain text
1181 #: build/C/man3/pthread_attr_setdetachstate.3:50
1182 msgid ""
1183 "The B<pthread_attr_setdetachstate>()  function sets the detach state "
1184 "attribute of the thread attributes object referred to by I<attr> to the "
1185 "value specified in I<detachstate>.  The detach state attribute determines "
1186 "whether a thread created using the thread attributes object I<attr> will be "
1187 "created in a joinable or a detached state."
1188 msgstr ""
1189
1190 #. type: Plain text
1191 #: build/C/man3/pthread_attr_setdetachstate.3:53
1192 msgid "The following values may be specified in I<detachstate>:"
1193 msgstr ""
1194
1195 #. type: TP
1196 #: build/C/man3/pthread_attr_setdetachstate.3:53
1197 #, no-wrap
1198 msgid "B<PTHREAD_CREATE_DETACHED>"
1199 msgstr ""
1200
1201 #. type: Plain text
1202 #: build/C/man3/pthread_attr_setdetachstate.3:58
1203 msgid "Threads that are created using I<attr> will be created in a detached state."
1204 msgstr ""
1205
1206 #. type: TP
1207 #: build/C/man3/pthread_attr_setdetachstate.3:58
1208 #, no-wrap
1209 msgid "B<PTHREAD_CREATE_JOINABLE>"
1210 msgstr ""
1211
1212 #. type: Plain text
1213 #: build/C/man3/pthread_attr_setdetachstate.3:63
1214 msgid "Threads that are created using I<attr> will be created in a joinable state."
1215 msgstr ""
1216
1217 #. type: Plain text
1218 #: build/C/man3/pthread_attr_setdetachstate.3:67
1219 msgid ""
1220 "The default setting of the detach state attribute in a newly initialized "
1221 "thread attributes object is B<PTHREAD_CREATE_JOINABLE>."
1222 msgstr ""
1223
1224 #. type: Plain text
1225 #: build/C/man3/pthread_attr_setdetachstate.3:74
1226 msgid ""
1227 "The B<pthread_attr_getdetachstate>()  returns the detach state attribute of "
1228 "the thread attributes object I<attr> in the buffer pointed to by "
1229 "I<detachstate>."
1230 msgstr ""
1231
1232 #. type: Plain text
1233 #: build/C/man3/pthread_attr_setdetachstate.3:80
1234 msgid "B<pthread_attr_setdetachstate>()  can fail with the following error:"
1235 msgstr ""
1236
1237 #. type: Plain text
1238 #: build/C/man3/pthread_attr_setdetachstate.3:84
1239 msgid "An invalid value was specified in I<detachstate>."
1240 msgstr ""
1241
1242 #. type: Plain text
1243 #: build/C/man3/pthread_attr_setdetachstate.3:90
1244 msgid "See B<pthread_create>(3)  for more details on detached and joinable threads."
1245 msgstr ""
1246
1247 #. type: Plain text
1248 #: build/C/man3/pthread_attr_setdetachstate.3:98
1249 msgid ""
1250 "A thread that is created in a joinable state should eventually either be "
1251 "joined using B<pthread_join>(3)  or detached using B<pthread_detach>(3); see "
1252 "B<pthread_create>(3)."
1253 msgstr ""
1254
1255 #. type: Plain text
1256 #: build/C/man3/pthread_attr_setdetachstate.3:105
1257 msgid ""
1258 "It is an error to specify the thread ID of a thread that was created in a "
1259 "detached state in a later call to B<pthread_detach>(3)  or "
1260 "B<pthread_join>(3)."
1261 msgstr ""
1262
1263 #. type: Plain text
1264 #: build/C/man3/pthread_attr_setdetachstate.3:108 build/C/man3/pthread_attr_setstack.3:154
1265 msgid "See B<pthread_attr_init>(3)."
1266 msgstr ""
1267
1268 #. type: Plain text
1269 #: build/C/man3/pthread_attr_setdetachstate.3:114
1270 msgid ""
1271 "B<pthread_attr_init>(3), B<pthread_create>(3), B<pthread_detach>(3), "
1272 "B<pthread_join>(3), B<pthreads>(7)"
1273 msgstr ""
1274
1275 #. type: TH
1276 #: build/C/man3/pthread_attr_setguardsize.3:24
1277 #, no-wrap
1278 msgid "PTHREAD_ATTR_SETGUARDSIZE"
1279 msgstr ""
1280
1281 #. type: TH
1282 #: build/C/man3/pthread_attr_setguardsize.3:24 build/C/man3/pthread_attr_setscope.3:24 build/C/man3/pthread_attr_setstack.3:24 build/C/man3/pthread_attr_setstackaddr.3:24 build/C/man3/pthread_self.3:24
1283 #, no-wrap
1284 msgid "2008-10-24"
1285 msgstr ""
1286
1287 #. type: Plain text
1288 #: build/C/man3/pthread_attr_setguardsize.3:28
1289 msgid ""
1290 "pthread_attr_setguardsize, pthread_attr_getguardsize - set/get guard size "
1291 "attribute in thread attributes object"
1292 msgstr ""
1293
1294 #. type: Plain text
1295 #: build/C/man3/pthread_attr_setguardsize.3:36
1296 #, no-wrap
1297 msgid ""
1298 "B<int pthread_attr_setguardsize(pthread_attr_t *>I<attr>B<, size_t "
1299 ">I<guardsize>B<);>\n"
1300 "B<int pthread_attr_getguardsize(pthread_attr_t *>I<attr>B<, size_t "
1301 "*>I<guardsize>B<);>\n"
1302 msgstr ""
1303
1304 #. type: Plain text
1305 #: build/C/man3/pthread_attr_setguardsize.3:46
1306 msgid ""
1307 "The B<pthread_attr_setguardsize>()  function sets the guard size attribute "
1308 "of the thread attributes object referred to by I<attr> to the value "
1309 "specified in I<guardsize>."
1310 msgstr ""
1311
1312 #. type: Plain text
1313 #: build/C/man3/pthread_attr_setguardsize.3:56
1314 msgid ""
1315 "If I<guardsize> is greater than 0, then for each new thread created using "
1316 "I<attr> the system allocates an additional region of at least I<guardsize> "
1317 "bytes at the end of the thread's stack to act as the guard area for the "
1318 "stack (but see BUGS)."
1319 msgstr ""
1320
1321 #. type: Plain text
1322 #: build/C/man3/pthread_attr_setguardsize.3:62
1323 msgid ""
1324 "If I<guardsize> is 0, then new threads created with I<attr> will not have a "
1325 "guard area."
1326 msgstr ""
1327
1328 #. type: Plain text
1329 #: build/C/man3/pthread_attr_setguardsize.3:64
1330 msgid "The default guard size is the same as the system page size."
1331 msgstr ""
1332
1333 #. type: Plain text
1334 #: build/C/man3/pthread_attr_setguardsize.3:79
1335 msgid ""
1336 "If the stack address attribute has been set in I<attr> (using "
1337 "B<pthread_attr_setstack>(3)  or B<pthread_attr_setstackaddr>(3)), meaning "
1338 "that the caller is allocating the thread's stack, then the guard size "
1339 "attribute is ignored (i.e., no guard area is created by the system): it is "
1340 "the application's responsibility to handle stack overflow (perhaps by using "
1341 "B<mprotect>(2)  to manually define a guard area at the end of the stack that "
1342 "it has allocated)."
1343 msgstr ""
1344
1345 #. type: Plain text
1346 #: build/C/man3/pthread_attr_setguardsize.3:87
1347 msgid ""
1348 "The B<pthread_attr_getguardsize>()  function returns the guard size "
1349 "attribute of the thread attributes object referred to by I<attr> in the "
1350 "buffer pointed to by I<guardsize>."
1351 msgstr ""
1352
1353 #. type: Plain text
1354 #: build/C/man3/pthread_attr_setguardsize.3:101
1355 msgid ""
1356 "POSIX.1-2001 documents an B<EINVAL> error if I<attr> or I<guardsize> is "
1357 "invalid.  On Linux these functions always succeed (but portable and "
1358 "future-proof applications should nevertheless handle a possible error "
1359 "return)."
1360 msgstr ""
1361
1362 #. type: Plain text
1363 #: build/C/man3/pthread_attr_setguardsize.3:103 build/C/man3/pthread_attr_setstackaddr.3:80 build/C/man3/pthread_attr_setstacksize.3:80
1364 msgid "These functions are provided by glibc since version 2.1."
1365 msgstr ""
1366
1367 #. type: Plain text
1368 #: build/C/man3/pthread_attr_setguardsize.3:119
1369 msgid ""
1370 "A guard area consists of virtual memory pages that are protected to prevent "
1371 "read and write access.  If a thread overflows its stack into the guard area, "
1372 "then, on most hard architectures, it receives a B<SIGSEGV> signal, thus "
1373 "notifying it of the overflow.  Guard areas start on page boundaries, and the "
1374 "guard size is internally rounded up to the system page size when creating a "
1375 "thread.  (Nevertheless, B<pthread_attr_getguardsize>()  returns the guard "
1376 "size that was set by B<pthread_attr_setguardsize>().)"
1377 msgstr ""
1378
1379 #. type: Plain text
1380 #: build/C/man3/pthread_attr_setguardsize.3:123
1381 msgid ""
1382 "Setting a guard size of 0 may be useful to save memory in an application "
1383 "that creates many threads and knows that stack overflow can never occur."
1384 msgstr ""
1385
1386 #. type: Plain text
1387 #: build/C/man3/pthread_attr_setguardsize.3:127
1388 msgid ""
1389 "Choosing a guard size larger than the default size may be necessary for "
1390 "detecting stack overflows if a thread allocates large data structures on the "
1391 "stack."
1392 msgstr ""
1393
1394 #. type: SH
1395 #: build/C/man3/pthread_attr_setguardsize.3:127 build/C/man3/pthread_attr_setinheritsched.3:103 build/C/man3/pthread_attr_setstacksize.3:96 build/C/man3/pthread_create.3:361 build/C/man3/pthread_exit.3:90
1396 #, no-wrap
1397 msgid "BUGS"
1398 msgstr ""
1399
1400 #. type: Plain text
1401 #: build/C/man3/pthread_attr_setguardsize.3:138
1402 msgid ""
1403 "As at glibc 2.8, the NPTL threading implementation includes the guard area "
1404 "within the stack size allocation, rather than allocating extra space at the "
1405 "end of the stack, as POSIX.1 requires.  (This can result in an B<EINVAL> "
1406 "error from B<pthread_create>(3)  if the guard size value is too large, "
1407 "leaving no space for the actual stack.)"
1408 msgstr ""
1409
1410 #.  glibc includes the guardsize within the allocated stack size,
1411 #.  which looks pretty clearly to be in violation of POSIX.
1412 #
1413 #.  Filed bug, 22 Oct 2008:
1414 #.  http://sources.redhat.com/bugzilla/show_bug.cgi?id=6973
1415 #
1416 #.  Older reports:
1417 #.  https//bugzilla.redhat.com/show_bug.cgi?id=435337
1418 #.  Reportedly, LinuxThreads did the right thing, allocating
1419 #.  extra space at the end of the stack:
1420 #.  http://sourceware.org/ml/libc-alpha/2008-05/msg00086.html
1421 #. type: Plain text
1422 #: build/C/man3/pthread_attr_setguardsize.3:152
1423 msgid ""
1424 "The obsolete LinuxThreads implementation did the right thing, allocating "
1425 "extra space at the end of the stack for the guard area."
1426 msgstr ""
1427
1428 #. type: Plain text
1429 #: build/C/man3/pthread_attr_setguardsize.3:155
1430 msgid "See B<pthread_getattr_np>(3)."
1431 msgstr ""
1432
1433 #. type: Plain text
1434 #: build/C/man3/pthread_attr_setguardsize.3:163
1435 msgid ""
1436 "B<mmap>(2), B<mprotect>(2), B<pthread_attr_init>(3), "
1437 "B<pthread_attr_setstack>(3), B<pthread_attr_setstacksize>(3), "
1438 "B<pthread_create>(3), B<pthreads>(7)"
1439 msgstr ""
1440
1441 #. type: TH
1442 #: build/C/man3/pthread_attr_setinheritsched.3:24
1443 #, no-wrap
1444 msgid "PTHREAD_ATTR_SETINHERITSCHED"
1445 msgstr ""
1446
1447 #. type: TH
1448 #: build/C/man3/pthread_attr_setinheritsched.3:24
1449 #, no-wrap
1450 msgid "2008-11-10"
1451 msgstr ""
1452
1453 #. type: Plain text
1454 #: build/C/man3/pthread_attr_setinheritsched.3:28
1455 msgid ""
1456 "pthread_attr_setinheritsched, pthread_attr_getinheritsched - set/get inherit "
1457 "scheduler attribute in thread attributes object"
1458 msgstr ""
1459
1460 #. type: Plain text
1461 #: build/C/man3/pthread_attr_setinheritsched.3:36
1462 #, no-wrap
1463 msgid ""
1464 "B<int pthread_attr_setinheritsched(pthread_attr_t *>I<attr>B<,>\n"
1465 "B<                                 int >I<inheritsched>B<);>\n"
1466 "B<int pthread_attr_getinheritsched(pthread_attr_t *>I<attr>B<,>\n"
1467 "B<                                 int *>I<inheritsched>B<);>\n"
1468 msgstr ""
1469
1470 #. type: Plain text
1471 #: build/C/man3/pthread_attr_setinheritsched.3:52
1472 msgid ""
1473 "The B<pthread_attr_setinheritsched>()  function sets the inherit scheduler "
1474 "attribute of the thread attributes object referred to by I<attr> to the "
1475 "value specified in I<inheritsched>.  The inherit scheduler attribute "
1476 "determines whether a thread created using the thread attributes object "
1477 "I<attr> will inherit its scheduling attributes from the calling thread or "
1478 "whether it will take them from I<attr>."
1479 msgstr ""
1480
1481 #. type: Plain text
1482 #: build/C/man3/pthread_attr_setinheritsched.3:55
1483 msgid "The following values may be specified in I<inheritsched>:"
1484 msgstr ""
1485
1486 #. type: TP
1487 #: build/C/man3/pthread_attr_setinheritsched.3:55
1488 #, no-wrap
1489 msgid "B<PTHREAD_INHERIT_SCHED>"
1490 msgstr ""
1491
1492 #. type: Plain text
1493 #: build/C/man3/pthread_attr_setinheritsched.3:63
1494 msgid ""
1495 "Threads that are created using I<attr> inherit scheduling attributes from "
1496 "the creating thread; the scheduling attributes in I<attr> are ignored."
1497 msgstr ""
1498
1499 #. type: TP
1500 #: build/C/man3/pthread_attr_setinheritsched.3:63
1501 #, no-wrap
1502 msgid "B<PTHREAD_EXPLICIT_SCHED>"
1503 msgstr ""
1504
1505 #.  FIXME what are the defaults for scheduler settings?
1506 #. type: Plain text
1507 #: build/C/man3/pthread_attr_setinheritsched.3:70
1508 msgid ""
1509 "Threads that are created using I<attr> take their scheduling attributes from "
1510 "the values specified by the attributes object."
1511 msgstr ""
1512
1513 #. type: Plain text
1514 #: build/C/man3/pthread_attr_setinheritsched.3:74
1515 msgid ""
1516 "The default setting of the inherit scheduler attribute in a newly "
1517 "initialized thread attributes object is B<PTHREAD_INHERIT_SCHED>."
1518 msgstr ""
1519
1520 #. type: Plain text
1521 #: build/C/man3/pthread_attr_setinheritsched.3:81
1522 msgid ""
1523 "The B<pthread_attr_getinheritsched>()  returns the inherit scheduler "
1524 "attribute of the thread attributes object I<attr> in the buffer pointed to "
1525 "by I<inheritsched>."
1526 msgstr ""
1527
1528 #. type: Plain text
1529 #: build/C/man3/pthread_attr_setinheritsched.3:87
1530 msgid "B<pthread_attr_setinheritsched>()  can fail with the following error:"
1531 msgstr ""
1532
1533 #. type: Plain text
1534 #: build/C/man3/pthread_attr_setinheritsched.3:91
1535 msgid "Invalid value in I<inheritsched>."
1536 msgstr ""
1537
1538 #.  .SH VERSIONS
1539 #.  Available since glibc 2.0.
1540 #. type: Plain text
1541 #: build/C/man3/pthread_attr_setinheritsched.3:98
1542 msgid ""
1543 "POSIX.1-2001 also documents an optional B<ENOTSUP> error (\"attempt was made "
1544 "to set the attribute to an unsupported value\") for "
1545 "B<pthread_attr_setinheritsched>()."
1546 msgstr ""
1547
1548 #. type: Plain text
1549 #: build/C/man3/pthread_attr_setinheritsched.3:103 build/C/man3/pthread_attr_setschedparam.3:91 build/C/man3/pthread_attr_setschedpolicy.3:91
1550 msgid "See B<pthread_setschedparam>(3)."
1551 msgstr ""
1552
1553 #.  FIXME . Track status of the following bug:
1554 #.  http://sourceware.org/bugzilla/show_bug.cgi?id=7007
1555 #. type: Plain text
1556 #: build/C/man3/pthread_attr_setinheritsched.3:119
1557 msgid ""
1558 "As at glibc 2.8, if a thread attributes object is initialized using "
1559 "B<pthread_attr_init>(3), then the scheduling policy of the attributes object "
1560 "is set to B<SCHED_OTHER> and the scheduling priority is set to 0.  However, "
1561 "if the inherit scheduler attribute is then set to B<PTHREAD_EXPLICIT_SCHED>, "
1562 "then a thread created using the attribute object wrongly inherits its "
1563 "scheduling attributes from the creating thread.  This bug does not occur if "
1564 "either the scheduling policy or scheduling priority attribute is explicitly "
1565 "set in the thread attributes object before calling B<pthread_create>(3)."
1566 msgstr ""
1567
1568 #. type: Plain text
1569 #: build/C/man3/pthread_attr_setinheritsched.3:128
1570 msgid ""
1571 "B<sched_setscheduler>(2), B<pthread_attr_init>(3), "
1572 "B<pthread_attr_setschedparam>(3), B<pthread_attr_setschedpolicy>(3), "
1573 "B<pthread_create>(3), B<pthread_setschedparam>(3), "
1574 "B<pthread_setschedprio>(3), B<pthreads>(7)"
1575 msgstr ""
1576
1577 #. type: TH
1578 #: build/C/man3/pthread_attr_setschedparam.3:24
1579 #, no-wrap
1580 msgid "PTHREAD_ATTR_SETSCHEDPARAM"
1581 msgstr ""
1582
1583 #. type: Plain text
1584 #: build/C/man3/pthread_attr_setschedparam.3:28
1585 msgid ""
1586 "pthread_attr_setschedparam, pthread_attr_getschedparam - set/get scheduling "
1587 "parameter attributes in thread attributes object"
1588 msgstr ""
1589
1590 #. type: Plain text
1591 #: build/C/man3/pthread_attr_setschedparam.3:36
1592 #, no-wrap
1593 msgid ""
1594 "B<int pthread_attr_setschedparam(pthread_attr_t *>I<attr>B<,>\n"
1595 "B<                               const struct sched_param *>I<param>B<);>\n"
1596 "B<int pthread_attr_getschedparam(pthread_attr_t *>I<attr>B<,>\n"
1597 "B<                               struct sched_param *>I<param>B<);>\n"
1598 msgstr ""
1599
1600 #. type: Plain text
1601 #: build/C/man3/pthread_attr_setschedparam.3:49
1602 msgid ""
1603 "The B<pthread_attr_setschedparam>()  function sets the scheduling parameter "
1604 "attributes of the thread attributes object referred to by I<attr> to the "
1605 "values specified in the buffer pointed to by I<param>.  These attributes "
1606 "determine the scheduling parameters of a thread created using the thread "
1607 "attributes object I<attr>."
1608 msgstr ""
1609
1610 #. type: Plain text
1611 #: build/C/man3/pthread_attr_setschedparam.3:56
1612 msgid ""
1613 "The B<pthread_attr_getschedparam>()  returns the scheduling parameter "
1614 "attributes of the thread attributes object I<attr> in the buffer pointed to "
1615 "by I<param>."
1616 msgstr ""
1617
1618 #. type: Plain text
1619 #: build/C/man3/pthread_attr_setschedparam.3:58
1620 msgid "Scheduling parameters are maintained in the following structure:"
1621 msgstr ""
1622
1623 #. type: Plain text
1624 #: build/C/man3/pthread_attr_setschedparam.3:64 build/C/man3/pthread_setschedparam.3:66
1625 #, no-wrap
1626 msgid ""
1627 "struct sched_param {\n"
1628 "    int sched_priority;     /* Scheduling priority */\n"
1629 "};\n"
1630 msgstr ""
1631
1632 #. type: Plain text
1633 #: build/C/man3/pthread_attr_setschedparam.3:71 build/C/man3/pthread_setschedparam.3:73
1634 msgid ""
1635 "As can be seen, only one scheduling parameter is supported.  For details of "
1636 "the permitted ranges for scheduling priorities in each scheduling policy, "
1637 "see B<sched_setscheduler>(2)."
1638 msgstr ""
1639
1640 #.  .SH VERSIONS
1641 #.  Available since glibc 2.0.
1642 #. type: Plain text
1643 #: build/C/man3/pthread_attr_setschedparam.3:86
1644 msgid ""
1645 "POSIX.1 documents B<EINVAL> and B<ENOTSUP> errors for "
1646 "B<pthread_attr_setschedparam>().  On Linux these functions always succeed "
1647 "(but portable and future-proof applications should nevertheless handle a "
1648 "possible error return)."
1649 msgstr ""
1650
1651 #. type: Plain text
1652 #: build/C/man3/pthread_attr_setschedparam.3:95
1653 msgid ""
1654 "See B<pthread_attr_setschedpolicy>(3)  for a list of the thread scheduling "
1655 "policies supported on Linux."
1656 msgstr ""
1657
1658 #. type: Plain text
1659 #: build/C/man3/pthread_attr_setschedparam.3:105
1660 msgid ""
1661 "B<sched_get_priority_min>(2), B<sched_setscheduler>(2), "
1662 "B<pthread_attr_init>(3), B<pthread_attr_setinheritsched>(3), "
1663 "B<pthread_attr_setschedpolicy>(3), B<pthread_create>(3), "
1664 "B<pthread_setschedparam>(3), B<pthread_setschedprio>(3), B<pthreads>(7)"
1665 msgstr ""
1666
1667 #. type: TH
1668 #: build/C/man3/pthread_attr_setschedpolicy.3:24
1669 #, no-wrap
1670 msgid "PTHREAD_ATTR_SETSCHEDPOLICY"
1671 msgstr ""
1672
1673 #. type: Plain text
1674 #: build/C/man3/pthread_attr_setschedpolicy.3:28
1675 msgid ""
1676 "pthread_attr_setschedpolicy, pthread_attr_getschedpolicy - set/get "
1677 "scheduling policy attribute in thread attributes object"
1678 msgstr ""
1679
1680 #. type: Plain text
1681 #: build/C/man3/pthread_attr_setschedpolicy.3:36
1682 #, no-wrap
1683 msgid ""
1684 "B<int pthread_attr_setschedpolicy(pthread_attr_t *>I<attr>B<, int "
1685 ">I<policy>B<);>\n"
1686 "B<int pthread_attr_getschedpolicy(pthread_attr_t *>I<attr>B<, int "
1687 ">I<*policy>B<);>\n"
1688 msgstr ""
1689
1690 #. type: Plain text
1691 #: build/C/man3/pthread_attr_setschedpolicy.3:49
1692 msgid ""
1693 "The B<pthread_attr_setschedpolicy>()  function sets the scheduling policy "
1694 "attribute of the thread attributes object referred to by I<attr> to the "
1695 "value specified in I<policy>.  This attribute determines the scheduling "
1696 "policy of a thread created using the thread attributes object I<attr>."
1697 msgstr ""
1698
1699 #.  FIXME . pthread_setschedparam() places no restriction on the policy,
1700 #.  but pthread_attr_setschedpolicy() restricts policy to RR/FIFO/OTHER
1701 #.  http://sourceware.org/bugzilla/show_bug.cgi?id=7013
1702 #. type: Plain text
1703 #: build/C/man3/pthread_attr_setschedpolicy.3:62
1704 msgid ""
1705 "The supported values for I<policy> are B<SCHED_FIFO>, B<SCHED_RR>, and "
1706 "B<SCHED_OTHER>, with the semantics described in B<sched_setscheduler>(2)."
1707 msgstr ""
1708
1709 #. type: Plain text
1710 #: build/C/man3/pthread_attr_setschedpolicy.3:69
1711 msgid ""
1712 "The B<pthread_attr_getschedpolicy>()  returns the scheduling policy "
1713 "attribute of the thread attributes object I<attr> in the buffer pointed to "
1714 "by I<policy>."
1715 msgstr ""
1716
1717 #. type: Plain text
1718 #: build/C/man3/pthread_attr_setschedpolicy.3:75
1719 msgid "B<pthread_attr_setschedpolicy>()  can fail with the following error:"
1720 msgstr ""
1721
1722 #. type: Plain text
1723 #: build/C/man3/pthread_attr_setschedpolicy.3:79
1724 msgid "Invalid value in I<policy>."
1725 msgstr ""
1726
1727 #.  .SH VERSIONS
1728 #.  Available since glibc 2.0.
1729 #. type: Plain text
1730 #: build/C/man3/pthread_attr_setschedpolicy.3:86
1731 msgid ""
1732 "POSIX.1-2001 also documents an optional B<ENOTSUP> error (\"attempt was made "
1733 "to set the attribute to an unsupported value\") for "
1734 "B<pthread_attr_setschedpolicy>()."
1735 msgstr ""
1736
1737 #. type: Plain text
1738 #: build/C/man3/pthread_attr_setschedpolicy.3:100
1739 msgid ""
1740 "B<sched_setscheduler>(2), B<pthread_attr_init>(3), "
1741 "B<pthread_attr_setinheritsched>(3), B<pthread_attr_setschedparam>(3), "
1742 "B<pthread_create>(3), B<pthread_setschedparam>(3), "
1743 "B<pthread_setschedprio>(3), B<pthreads>(7)"
1744 msgstr ""
1745
1746 #. type: TH
1747 #: build/C/man3/pthread_attr_setscope.3:24
1748 #, no-wrap
1749 msgid "PTHREAD_ATTR_SETSCOPE"
1750 msgstr ""
1751
1752 #. type: Plain text
1753 #: build/C/man3/pthread_attr_setscope.3:28
1754 msgid ""
1755 "pthread_attr_setscope, pthread_attr_getscope - set/get contention scope "
1756 "attribute in thread attributes object"
1757 msgstr ""
1758
1759 #. type: Plain text
1760 #: build/C/man3/pthread_attr_setscope.3:36
1761 #, no-wrap
1762 msgid ""
1763 "B<int pthread_attr_setscope(pthread_attr_t *>I<attr>B<, int >I<scope>B<);>\n"
1764 "B<int pthread_attr_getscope(pthread_attr_t *>I<attr>B<, int "
1765 "*>I<scope>B<);>\n"
1766 msgstr ""
1767
1768 #. type: Plain text
1769 #: build/C/man3/pthread_attr_setscope.3:50
1770 msgid ""
1771 "The B<pthread_attr_setscope>()  function sets the contention scope attribute "
1772 "of the thread attributes object referred to by I<attr> to the value "
1773 "specified in I<scope>.  The contention scope attribute defines the set of "
1774 "threads against which a thread competes for resources such as the CPU.  "
1775 "POSIX.1-2001 specifies two possible values for I<scope>:"
1776 msgstr ""
1777
1778 #. type: TP
1779 #: build/C/man3/pthread_attr_setscope.3:50
1780 #, no-wrap
1781 msgid "B<PTHREAD_SCOPE_SYSTEM>"
1782 msgstr ""
1783
1784 #. type: Plain text
1785 #: build/C/man3/pthread_attr_setscope.3:58
1786 msgid ""
1787 "The thread competes for resources with all other threads in all processes on "
1788 "the system that are in the same scheduling allocation domain (a group of one "
1789 "or more processors).  B<PTHREAD_SCOPE_SYSTEM> threads are scheduled relative "
1790 "to one another according to their scheduling policy and priority."
1791 msgstr ""
1792
1793 #. type: TP
1794 #: build/C/man3/pthread_attr_setscope.3:58
1795 #, no-wrap
1796 msgid "B<PTHREAD_SCOPE_PROCESS>"
1797 msgstr ""
1798
1799 #. type: Plain text
1800 #: build/C/man3/pthread_attr_setscope.3:73
1801 msgid ""
1802 "The thread competes for resources with all other threads in the same process "
1803 "that were also created with the B<PTHREAD_SCOPE_PROCESS> contention scope.  "
1804 "B<PTHREAD_SCOPE_PROCESS> threads are scheduled relative to other threads in "
1805 "the process according to their scheduling policy and priority.  POSIX.1-2001 "
1806 "leaves it unspecified how these threads contend with other threads in other "
1807 "process on the system or with other threads in the same process that were "
1808 "created with the B<PTHREAD_SCOPE_SYSTEM> contention scope."
1809 msgstr ""
1810
1811 #. type: Plain text
1812 #: build/C/man3/pthread_attr_setscope.3:80
1813 msgid ""
1814 "POSIX.1-2001 only requires that an implementation support one of these "
1815 "contention scopes, but permits both to be supported.  Linux supports "
1816 "B<PTHREAD_SCOPE_SYSTEM>, but not B<PTHREAD_SCOPE_PROCESS>."
1817 msgstr ""
1818
1819 #. type: Plain text
1820 #: build/C/man3/pthread_attr_setscope.3:88
1821 msgid ""
1822 "The B<pthread_attr_getscope>()  function returns the contention scope "
1823 "attribute of the thread attributes object referred to by I<attr> in the "
1824 "buffer pointed to by I<scope>."
1825 msgstr ""
1826
1827 #. type: Plain text
1828 #: build/C/man3/pthread_attr_setscope.3:94
1829 msgid "B<pthread_attr_setscope>()  can fail with the following errors:"
1830 msgstr ""
1831
1832 #. type: Plain text
1833 #: build/C/man3/pthread_attr_setscope.3:98
1834 msgid "An invalid value was specified in I<scope>."
1835 msgstr ""
1836
1837 #. type: TP
1838 #: build/C/man3/pthread_attr_setscope.3:98
1839 #, no-wrap
1840 msgid "B<ENOTSUP>"
1841 msgstr ""
1842
1843 #. type: Plain text
1844 #: build/C/man3/pthread_attr_setscope.3:104
1845 msgid ""
1846 "I<scope> specified the value B<PTHREAD_SCOPE_PROCESS>, which is not "
1847 "supported on Linux."
1848 msgstr ""
1849
1850 #. type: Plain text
1851 #: build/C/man3/pthread_attr_setscope.3:114
1852 msgid ""
1853 "The B<PTHREAD_SCOPE_SYSTEM> contention scope typically indicates that a "
1854 "userspace thread is bound directly to a single kernel-scheduling entity.  "
1855 "This is the case on Linux for the obsolete LinuxThreads implementation and "
1856 "the modern NPTL implementation, which are both 1:1 threading "
1857 "implementations."
1858 msgstr ""
1859
1860 #. type: Plain text
1861 #: build/C/man3/pthread_attr_setscope.3:117
1862 msgid ""
1863 "POSIX.1-2001 specifies that the default contention scope is "
1864 "implementation-defined."
1865 msgstr ""
1866
1867 #. type: Plain text
1868 #: build/C/man3/pthread_attr_setscope.3:125
1869 msgid ""
1870 "B<pthread_attr_init>(3), B<pthread_attr_setaffinity_np>(3), "
1871 "B<pthread_attr_setinheritsched>(3), B<pthread_attr_setschedparam>(3), "
1872 "B<pthread_attr_setschedpolicy>(3), B<pthread_create>(3), B<pthreads>(7)"
1873 msgstr ""
1874
1875 #. type: TH
1876 #: build/C/man3/pthread_attr_setstack.3:24
1877 #, no-wrap
1878 msgid "PTHREAD_ATTR_SETSTACK"
1879 msgstr ""
1880
1881 #. type: Plain text
1882 #: build/C/man3/pthread_attr_setstack.3:28
1883 msgid ""
1884 "pthread_attr_setstack, pthread_attr_getstack - set/get stack attributes in "
1885 "thread attributes object"
1886 msgstr ""
1887
1888 #. type: Plain text
1889 #: build/C/man3/pthread_attr_setstack.3:36
1890 #, no-wrap
1891 msgid ""
1892 "B<int pthread_attr_setstack(pthread_attr_t *>I<attr>B<,>\n"
1893 "B<                          void *>I<stackaddr>B<, size_t "
1894 ">I<stacksize>B<);>\n"
1895 "B<int pthread_attr_getstack(pthread_attr_t *>I<attr>B<,>\n"
1896 "B<                          void **>I<stackaddr>B<, size_t "
1897 "*>I<stacksize>B<);>\n"
1898 msgstr ""
1899
1900 #. type: Plain text
1901 #: build/C/man3/pthread_attr_setstack.3:43 build/C/man3/pthread_sigqueue.3:39
1902 msgid "Feature Test Macro Requirements for glibc (see B<feature_test_macros>(7)):"
1903 msgstr ""
1904
1905 #. type: Plain text
1906 #: build/C/man3/pthread_attr_setstack.3:48
1907 msgid "B<pthread_attr_getstack>(), B<pthread_attr_setstack>():"
1908 msgstr ""
1909
1910 #. type: Plain text
1911 #: build/C/man3/pthread_attr_setstack.3:50
1912 msgid "_POSIX_C_SOURCE\\ E<gt>=\\ 200112L || _XOPEN_SOURCE\\ E<gt>=\\ 600"
1913 msgstr ""
1914
1915 #. type: Plain text
1916 #: build/C/man3/pthread_attr_setstack.3:66
1917 msgid ""
1918 "The B<pthread_attr_setstack>()  function sets the stack address and stack "
1919 "size attributes of the thread attributes object referred to by I<attr> to "
1920 "the values specified in I<stackaddr> and I<stacksize>, respectively.  These "
1921 "attributes specify the location and size of the stack that should be used by "
1922 "a thread that is created using the thread attributes object I<attr>."
1923 msgstr ""
1924
1925 #. type: Plain text
1926 #: build/C/man3/pthread_attr_setstack.3:72
1927 msgid ""
1928 "I<stackaddr> should point to the lowest addressable byte of a buffer of "
1929 "I<stacksize> bytes that was allocated by the caller.  The pages of the "
1930 "allocated buffer should be both readable and writable."
1931 msgstr ""
1932
1933 #. type: Plain text
1934 #: build/C/man3/pthread_attr_setstack.3:83
1935 msgid ""
1936 "The B<pthread_attr_getstack>()  function returns the stack address and stack "
1937 "size attributes of the thread attributes object referred to by I<attr> in "
1938 "the buffers pointed to by I<stackaddr> and I<stacksize>, respectively."
1939 msgstr ""
1940
1941 #. type: Plain text
1942 #: build/C/man3/pthread_attr_setstack.3:89
1943 msgid "B<pthread_attr_setstack>()  can fail with the following error:"
1944 msgstr ""
1945
1946 #. type: Plain text
1947 #: build/C/man3/pthread_attr_setstack.3:100
1948 msgid ""
1949 "I<stacksize> is less than B<PTHREAD_STACK_MIN> (16384) bytes.  On some "
1950 "systems, this error may also occur if I<stackaddr> or I<stackaddr\\ +\\ "
1951 "stacksize> is not suitably aligned."
1952 msgstr ""
1953
1954 #. type: Plain text
1955 #: build/C/man3/pthread_attr_setstack.3:108
1956 msgid ""
1957 "POSIX.1-2001 also documents an B<EACCES> error if the stack area described "
1958 "by I<stackaddr> and I<stacksize> is not both readable and writable by the "
1959 "caller."
1960 msgstr ""
1961
1962 #. type: Plain text
1963 #: build/C/man3/pthread_attr_setstack.3:110
1964 msgid "These functions are provided by glibc since version 2.2."
1965 msgstr ""
1966
1967 #. type: Plain text
1968 #: build/C/man3/pthread_attr_setstack.3:120
1969 msgid ""
1970 "These functions are provided for applications that must ensure that a "
1971 "thread's stack is placed in a particular location.  For most applications, "
1972 "this is not necessary, and the use of these functions should be avoided.  "
1973 "(Use B<pthread_attr_setstacksize>(3)  if an application simply requires a "
1974 "stack size other than the default.)"
1975 msgstr ""
1976
1977 #. type: Plain text
1978 #: build/C/man3/pthread_attr_setstack.3:131
1979 msgid ""
1980 "When an application employs B<pthread_attr_setstack>(), it takes over the "
1981 "responsibility of allocating the stack.  Any guard size value that was set "
1982 "using B<pthread_attr_setguardsize>(3)  is ignored.  If deemed necessary, it "
1983 "is the application's responsibility to allocate a guard area (one or more "
1984 "pages protected against reading and writing)  to handle the possibility of "
1985 "stack overflow."
1986 msgstr ""
1987
1988 #. type: Plain text
1989 #: build/C/man3/pthread_attr_setstack.3:142
1990 msgid ""
1991 "The address specified in I<stackaddr> should be suitably aligned: for full "
1992 "portability, align it on a page boundary (I<sysconf(_SC_PAGESIZE)>).  "
1993 "B<posix_memalign>(3)  may be useful for allocation.  Probably, I<stacksize> "
1994 "should also be a multiple of the system page size."
1995 msgstr ""
1996
1997 #. type: Plain text
1998 #: build/C/man3/pthread_attr_setstack.3:151
1999 msgid ""
2000 "If I<attr> is used to create multiple threads, then the caller must change "
2001 "the stack address attribute between calls to B<pthread_create>(3); "
2002 "otherwise, the threads will attempt to use the same memory area for their "
2003 "stacks, and chaos will ensue."
2004 msgstr ""
2005
2006 #. type: Plain text
2007 #: build/C/man3/pthread_attr_setstack.3:164
2008 msgid ""
2009 "B<mmap>(2), B<mprotect>(2), B<posix_memalign>(3), B<pthread_attr_init>(3), "
2010 "B<pthread_attr_setguardsize>(3), B<pthread_attr_setstackaddr>(3), "
2011 "B<pthread_attr_setstacksize>(3), B<pthread_create>(3), B<pthreads>(7)"
2012 msgstr ""
2013
2014 #. type: TH
2015 #: build/C/man3/pthread_attr_setstackaddr.3:24
2016 #, no-wrap
2017 msgid "PTHREAD_ATTR_SETSTACKADDR"
2018 msgstr ""
2019
2020 #. type: Plain text
2021 #: build/C/man3/pthread_attr_setstackaddr.3:28
2022 msgid ""
2023 "pthread_attr_setstackaddr, pthread_attr_getstackaddr - set/get stack address "
2024 "attribute in thread attributes object"
2025 msgstr ""
2026
2027 #. type: Plain text
2028 #: build/C/man3/pthread_attr_setstackaddr.3:36
2029 #, no-wrap
2030 msgid ""
2031 "B<int pthread_attr_setstackaddr(pthread_attr_t *>I<attr>B<, void "
2032 "*>I<stackaddr>B<);>\n"
2033 "B<int pthread_attr_getstackaddr(pthread_attr_t *>I<attr>B<, void "
2034 "**>I<stackaddr>B<);>\n"
2035 msgstr ""
2036
2037 #. type: Plain text
2038 #: build/C/man3/pthread_attr_setstackaddr.3:46
2039 msgid ""
2040 "These functions are obsolete: B<do not use them.> Use "
2041 "B<pthread_attr_setstack>(3)  and B<pthread_attr_getstack>(3)  instead."
2042 msgstr ""
2043
2044 #. type: Plain text
2045 #: build/C/man3/pthread_attr_setstackaddr.3:57
2046 msgid ""
2047 "The B<pthread_attr_setstackaddr>()  function sets the stack address "
2048 "attribute of the thread attributes object referred to by I<attr> to the "
2049 "value specified in I<stackaddr>.  This attribute specifies the location of "
2050 "the stack that should be used by a thread that is created using the thread "
2051 "attributes object I<attr>."
2052 msgstr ""
2053
2054 #. type: Plain text
2055 #: build/C/man3/pthread_attr_setstackaddr.3:63
2056 msgid ""
2057 "I<stackaddr> should point to a buffer of at least B<PTHREAD_STACK_MIN> bytes "
2058 "that was allocated by the caller.  The pages of the allocated buffer should "
2059 "be both readable and writable."
2060 msgstr ""
2061
2062 #. type: Plain text
2063 #: build/C/man3/pthread_attr_setstackaddr.3:71
2064 msgid ""
2065 "The B<pthread_attr_getstackaddr>()  function returns the stack address "
2066 "attribute of the thread attributes object referred to by I<attr> in the "
2067 "buffer pointed to by I<stackaddr>."
2068 msgstr ""
2069
2070 #. type: Plain text
2071 #: build/C/man3/pthread_attr_setstackaddr.3:78
2072 msgid ""
2073 "No errors are defined (but applications should nevertheless handle a "
2074 "possible error return)."
2075 msgstr ""
2076
2077 #. type: Plain text
2078 #: build/C/man3/pthread_attr_setstackaddr.3:83
2079 msgid ""
2080 "POSIX.1-2001 specifies these functions but marks them as obsolete.  "
2081 "POSIX.1-2008 removes the specification of these functions."
2082 msgstr ""
2083
2084 #. type: Plain text
2085 #: build/C/man3/pthread_attr_setstackaddr.3:107
2086 msgid ""
2087 "I<Do not use these functions!> They cannot be portably used, since they "
2088 "provide no way of specifying the direction of growth or the range of the "
2089 "stack.  For example, on architectures with a stack that grows downward, "
2090 "I<stackaddr> specifies the next address past the I<highest> address of the "
2091 "allocated stack area.  However, on architectures with a stack that grows "
2092 "upward, I<stackaddr> specifies the I<lowest> address in the allocated stack "
2093 "area.  By contrast, the I<stackaddr> used by B<pthread_attr_setstack>(3)  "
2094 "and B<pthread_attr_getstack>(3), is always a pointer to the lowest address "
2095 "in the allocated stack area (and the I<stacksize> argument specifies the "
2096 "range of the stack)."
2097 msgstr ""
2098
2099 #. type: Plain text
2100 #: build/C/man3/pthread_attr_setstackaddr.3:113
2101 msgid ""
2102 "B<pthread_attr_init>(3), B<pthread_attr_setstack>(3), "
2103 "B<pthread_attr_setstacksize>(3), B<pthread_create>(3), B<pthreads>(7)"
2104 msgstr ""
2105
2106 #. type: TH
2107 #: build/C/man3/pthread_attr_setstacksize.3:24
2108 #, no-wrap
2109 msgid "PTHREAD_ATTR_SETSTACKSIZE"
2110 msgstr ""
2111
2112 #. type: TH
2113 #: build/C/man3/pthread_attr_setstacksize.3:24
2114 #, no-wrap
2115 msgid "2008-11-05"
2116 msgstr ""
2117
2118 #. type: Plain text
2119 #: build/C/man3/pthread_attr_setstacksize.3:28
2120 msgid ""
2121 "pthread_attr_setstacksize, pthread_attr_getstacksize - set/get stack size "
2122 "attribute in thread attributes object"
2123 msgstr ""
2124
2125 #. type: Plain text
2126 #: build/C/man3/pthread_attr_setstacksize.3:36
2127 #, no-wrap
2128 msgid ""
2129 "B<int pthread_attr_setstacksize(pthread_attr_t *>I<attr>B<, size_t "
2130 ">I<stacksize>B<);>\n"
2131 "B<int pthread_attr_getstacksize(pthread_attr_t *>I<attr>B<, size_t "
2132 "*>I<stacksize>B<);>\n"
2133 msgstr ""
2134
2135 #. type: Plain text
2136 #: build/C/man3/pthread_attr_setstacksize.3:46
2137 msgid ""
2138 "The B<pthread_attr_setstacksize>()  function sets the stack size attribute "
2139 "of the thread attributes object referred to by I<attr> to the value "
2140 "specified in I<stacksize>."
2141 msgstr ""
2142
2143 #. type: Plain text
2144 #: build/C/man3/pthread_attr_setstacksize.3:50
2145 msgid ""
2146 "The stack size attribute determines the minimum size (in bytes) that will be "
2147 "allocated for threads created using the thread attributes object I<attr>."
2148 msgstr ""
2149
2150 #. type: Plain text
2151 #: build/C/man3/pthread_attr_setstacksize.3:58
2152 msgid ""
2153 "The B<pthread_attr_getstacksize>()  function returns the stack size "
2154 "attribute of the thread attributes object referred to by I<attr> in the "
2155 "buffer pointed to by I<stacksize>."
2156 msgstr ""
2157
2158 #. type: Plain text
2159 #: build/C/man3/pthread_attr_setstacksize.3:64
2160 msgid "B<pthread_attr_setstacksize>()  can fail with the following error:"
2161 msgstr ""
2162
2163 #. type: Plain text
2164 #: build/C/man3/pthread_attr_setstacksize.3:69
2165 msgid "The stack size is less than B<PTHREAD_STACK_MIN> (16384) bytes."
2166 msgstr ""
2167
2168 #.  e.g., MacOS
2169 #. type: Plain text
2170 #: build/C/man3/pthread_attr_setstacksize.3:78
2171 msgid ""
2172 "On some systems, B<pthread_attr_setstacksize>()  can fail with the error "
2173 "B<EINVAL> if I<stacksize> is not a multiple of the system page size."
2174 msgstr ""
2175
2176 #. type: Plain text
2177 #: build/C/man3/pthread_attr_setstacksize.3:85 build/C/man3/pthread_join.3:125
2178 msgid "See B<pthread_create>(3)."
2179 msgstr ""
2180
2181 #. type: Plain text
2182 #: build/C/man3/pthread_attr_setstacksize.3:88
2183 msgid ""
2184 "For details on the default stack size of new threads, see "
2185 "B<pthread_create>(3)."
2186 msgstr ""
2187
2188 #. type: Plain text
2189 #: build/C/man3/pthread_attr_setstacksize.3:91
2190 msgid ""
2191 "A thread's stack size is fixed at the time of thread creation.  Only the "
2192 "main thread can dynamically grow its stack."
2193 msgstr ""
2194
2195 #. type: Plain text
2196 #: build/C/man3/pthread_attr_setstacksize.3:96
2197 msgid ""
2198 "The B<pthread_attr_setstack>(3)  function allows an application to set both "
2199 "the size and location of a caller-allocated stack that is to be used by a "
2200 "thread."
2201 msgstr ""
2202
2203 #. type: Plain text
2204 #: build/C/man3/pthread_attr_setstacksize.3:108
2205 msgid ""
2206 "As at glibc 2.8, if the specified I<stacksize> is not a multiple of "
2207 "B<STACK_ALIGN> (16 bytes on most architectures), it may be rounded "
2208 "I<downward>, in violation of POSIX.1-2001, which says that the allocated "
2209 "stack will be at least I<stacksize> bytes."
2210 msgstr ""
2211
2212 #. type: Plain text
2213 #: build/C/man3/pthread_attr_setstacksize.3:115
2214 msgid ""
2215 "B<getrlimit>(2), B<pthread_attr_init>(3), B<pthread_attr_setguardsize>(3), "
2216 "B<pthread_attr_setstack>(3), B<pthread_create>(3), B<pthreads>(7)"
2217 msgstr ""
2218
2219 #. type: TH
2220 #: build/C/man3/pthread_cancel.3:24
2221 #, no-wrap
2222 msgid "PTHREAD_CANCEL"
2223 msgstr ""
2224
2225 #. type: TH
2226 #: build/C/man3/pthread_cancel.3:24 build/C/man3/pthread_setschedparam.3:24 build/C/man3/pthread_testcancel.3:24
2227 #, no-wrap
2228 msgid "2008-11-17"
2229 msgstr ""
2230
2231 #. type: Plain text
2232 #: build/C/man3/pthread_cancel.3:27
2233 msgid "pthread_cancel - send a cancellation request to a thread"
2234 msgstr ""
2235
2236 #. type: Plain text
2237 #: build/C/man3/pthread_cancel.3:32
2238 #, no-wrap
2239 msgid "B<int pthread_cancel(pthread_t >I<thread>B<);>\n"
2240 msgstr ""
2241
2242 #. type: Plain text
2243 #: build/C/man3/pthread_cancel.3:43
2244 msgid ""
2245 "The B<pthread_cancel>()  function sends a cancellation request to the thread "
2246 "I<thread>.  Whether and when the target thread reacts to the cancellation "
2247 "request depends on two attributes that are under the control of that thread: "
2248 "its cancelability I<state> and I<type>."
2249 msgstr ""
2250
2251 #. type: Plain text
2252 #: build/C/man3/pthread_cancel.3:55
2253 msgid ""
2254 "A thread's cancelability state, determined by B<pthread_setcancelstate>(3), "
2255 "can be I<enabled> (the default for new threads) or I<disabled>.  If a thread "
2256 "has disabled cancellation, then a cancellation request remains queued until "
2257 "the thread enables cancellation.  If a thread has enabled cancellation, then "
2258 "its cancelability type determines when cancellation occurs."
2259 msgstr ""
2260
2261 #. type: Plain text
2262 #: build/C/man3/pthread_cancel.3:71
2263 msgid ""
2264 "A thread's cancellation type, determined by B<pthread_setcanceltype>(3), may "
2265 "be either I<asynchronous> or I<deferred> (the default for new threads).  "
2266 "Asynchronous cancelability means that the thread can be canceled at any time "
2267 "(usually immediately, but the system does not guarantee this).  Deferred "
2268 "cancelability means that cancellation will be delayed until the thread next "
2269 "calls a function that is a I<cancellation point>.  A list of functions that "
2270 "are or may be cancellation points is provided in I<pthreads>(7)."
2271 msgstr ""
2272
2273 #. type: Plain text
2274 #: build/C/man3/pthread_cancel.3:75
2275 msgid ""
2276 "When a cancellation requested is acted on, the following steps occur for "
2277 "I<thread> (in this order):"
2278 msgstr ""
2279
2280 #. type: IP
2281 #: build/C/man3/pthread_cancel.3:75 build/C/man3/pthread_cleanup_push.3:66
2282 #, no-wrap
2283 msgid "1."
2284 msgstr ""
2285
2286 #. type: Plain text
2287 #: build/C/man3/pthread_cancel.3:80
2288 msgid ""
2289 "Cancellation clean-up handlers are popped (in the reverse of the order in "
2290 "which they were pushed) and called.  (See B<pthread_cleanup_push>(3).)"
2291 msgstr ""
2292
2293 #. type: IP
2294 #: build/C/man3/pthread_cancel.3:80 build/C/man3/pthread_cleanup_push.3:70
2295 #, no-wrap
2296 msgid "2."
2297 msgstr ""
2298
2299 #. type: Plain text
2300 #: build/C/man3/pthread_cancel.3:85
2301 msgid ""
2302 "Thread-specific data destructors are called, in an unspecified order.  (See "
2303 "B<pthread_key_create>(3).)"
2304 msgstr ""
2305
2306 #. type: IP
2307 #: build/C/man3/pthread_cancel.3:85 build/C/man3/pthread_cleanup_push.3:78
2308 #, no-wrap
2309 msgid "3."
2310 msgstr ""
2311
2312 #. type: Plain text
2313 #: build/C/man3/pthread_cancel.3:89
2314 msgid "The thread is terminated.  (See B<pthread_exit>(3).)"
2315 msgstr ""
2316
2317 #. type: Plain text
2318 #: build/C/man3/pthread_cancel.3:97
2319 msgid ""
2320 "The above steps happen asynchronously with respect to the "
2321 "B<pthread_cancel>()  call; the return status of B<pthread_cancel>()  merely "
2322 "informs the caller whether the cancellation request was successfully queued."
2323 msgstr ""
2324
2325 #. type: Plain text
2326 #: build/C/man3/pthread_cancel.3:106
2327 msgid ""
2328 "After a canceled thread has terminated, a join with that thread using "
2329 "B<pthread_join>(3)  obtains B<PTHREAD_CANCELED> as the thread's exit "
2330 "status.  (Joining with a thread is the only way to know that cancellation "
2331 "has completed.)"
2332 msgstr ""
2333
2334 #. type: Plain text
2335 #: build/C/man3/pthread_cancel.3:111
2336 msgid ""
2337 "On success, B<pthread_cancel>()  returns 0; on error, it returns a nonzero "
2338 "error number."
2339 msgstr ""
2340
2341 #. type: TP
2342 #: build/C/man3/pthread_cancel.3:112 build/C/man3/pthread_detach.3:57 build/C/man3/pthread_getcpuclockid.3:55 build/C/man3/pthread_join.3:91 build/C/man3/pthread_kill.3:59 build/C/man3/pthread_setaffinity_np.3:111 build/C/man3/pthread_setschedparam.3:111 build/C/man3/pthread_setschedprio.3:67 build/C/man3/pthread_sigqueue.3:83
2343 #, no-wrap
2344 msgid "B<ESRCH>"
2345 msgstr ""
2346
2347 #. type: Plain text
2348 #: build/C/man3/pthread_cancel.3:119 build/C/man3/pthread_detach.3:62 build/C/man3/pthread_getcpuclockid.3:60 build/C/man3/pthread_join.3:96 build/C/man3/pthread_kill.3:64 build/C/man3/pthread_setaffinity_np.3:116 build/C/man3/pthread_setschedparam.3:116 build/C/man3/pthread_setschedprio.3:72
2349 msgid "No thread with the ID I<thread> could be found."
2350 msgstr ""
2351
2352 #. type: Plain text
2353 #: build/C/man3/pthread_cancel.3:129
2354 msgid ""
2355 "On Linux, cancellation is implemented using signals.  Under the NPTL "
2356 "threading implementation, the first real-time signal (i.e., signal 32) is "
2357 "used for this purpose.  On LinuxThreads, the second real-time signal is "
2358 "used, if real-time signals are available, otherwise B<SIGUSR2> is used."
2359 msgstr ""
2360
2361 #. type: Plain text
2362 #: build/C/man3/pthread_cancel.3:135
2363 msgid ""
2364 "The program below creates a thread and then cancels it.  The main thread "
2365 "joins with the canceled thread to check that its exit status was "
2366 "B<PTHREAD_CANCELED>.  The following shell session shows what happens when we "
2367 "run the program:"
2368 msgstr ""
2369
2370 #. type: Plain text
2371 #: build/C/man3/pthread_cancel.3:143
2372 #, no-wrap
2373 msgid ""
2374 "$ ./a.out\n"
2375 "thread_func(): started; cancellation disabled\n"
2376 "main(): sending cancellation request\n"
2377 "thread_func(): about to enable cancellation\n"
2378 "main(): thread was canceled\n"
2379 msgstr ""
2380
2381 #. type: Plain text
2382 #: build/C/man3/pthread_cancel.3:153
2383 #, no-wrap
2384 msgid ""
2385 "#include E<lt>pthread.hE<gt>\n"
2386 "#include E<lt>stdio.hE<gt>\n"
2387 "#include E<lt>errno.hE<gt>\n"
2388 "#include E<lt>stdlib.hE<gt>\n"
2389 "#include E<lt>unistd.hE<gt>\n"
2390 msgstr ""
2391
2392 #. type: Plain text
2393 #: build/C/man3/pthread_cancel.3:161
2394 #, no-wrap
2395 msgid ""
2396 "static void *\n"
2397 "thread_func(void *ignored_argument)\n"
2398 "{\n"
2399 "    int s;\n"
2400 msgstr ""
2401
2402 #. type: Plain text
2403 #: build/C/man3/pthread_cancel.3:164
2404 #, no-wrap
2405 msgid ""
2406 "    /* Disable cancellation for a while, so that we don\\(aqt\n"
2407 "       immediately react to a cancellation request */\n"
2408 msgstr ""
2409
2410 #. type: Plain text
2411 #: build/C/man3/pthread_cancel.3:168
2412 #, no-wrap
2413 msgid ""
2414 "    s = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);\n"
2415 "    if (s != 0)\n"
2416 "        handle_error_en(s, \"pthread_setcancelstate\");\n"
2417 msgstr ""
2418
2419 #. type: Plain text
2420 #: build/C/man3/pthread_cancel.3:172
2421 #, no-wrap
2422 msgid ""
2423 "    printf(\"thread_func(): started; cancellation disabled\\en\");\n"
2424 "    sleep(5);\n"
2425 "    printf(\"thread_func(): about to enable cancellation\\en\");\n"
2426 msgstr ""
2427
2428 #. type: Plain text
2429 #: build/C/man3/pthread_cancel.3:176
2430 #, no-wrap
2431 msgid ""
2432 "    s = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);\n"
2433 "    if (s != 0)\n"
2434 "        handle_error_en(s, \"pthread_setcancelstate\");\n"
2435 msgstr ""
2436
2437 #. type: Plain text
2438 #: build/C/man3/pthread_cancel.3:178
2439 #, no-wrap
2440 msgid "    /* sleep() is a cancellation point */\n"
2441 msgstr ""
2442
2443 #. type: Plain text
2444 #: build/C/man3/pthread_cancel.3:180
2445 #, no-wrap
2446 msgid "    sleep(1000);        /* Should get canceled while we sleep */\n"
2447 msgstr ""
2448
2449 #. type: Plain text
2450 #: build/C/man3/pthread_cancel.3:182
2451 #, no-wrap
2452 msgid "    /* Should never get here */\n"
2453 msgstr ""
2454
2455 #. type: Plain text
2456 #: build/C/man3/pthread_cancel.3:186
2457 #, no-wrap
2458 msgid ""
2459 "    printf(\"thread_func(): not canceled!\\en\");\n"
2460 "    return NULL;\n"
2461 "}\n"
2462 msgstr ""
2463
2464 #. type: Plain text
2465 #: build/C/man3/pthread_cancel.3:193
2466 #, no-wrap
2467 msgid ""
2468 "int\n"
2469 "main(void)\n"
2470 "{\n"
2471 "    pthread_t thr;\n"
2472 "    void *res;\n"
2473 "    int s;\n"
2474 msgstr ""
2475
2476 #. type: Plain text
2477 #: build/C/man3/pthread_cancel.3:195
2478 #, no-wrap
2479 msgid "    /* Start a thread and then send it a cancellation request */\n"
2480 msgstr ""
2481
2482 #. type: Plain text
2483 #: build/C/man3/pthread_cancel.3:199
2484 #, no-wrap
2485 msgid ""
2486 "    s = pthread_create(&thr, NULL, &thread_func, NULL);\n"
2487 "    if (s != 0)\n"
2488 "        handle_error_en(s, \"pthread_create\");\n"
2489 msgstr ""
2490
2491 #. type: Plain text
2492 #: build/C/man3/pthread_cancel.3:201
2493 #, no-wrap
2494 msgid "    sleep(2);           /* Give thread a chance to get started */\n"
2495 msgstr ""
2496
2497 #. type: Plain text
2498 #: build/C/man3/pthread_cancel.3:206
2499 #, no-wrap
2500 msgid ""
2501 "    printf(\"main(): sending cancellation request\\en\");\n"
2502 "    s = pthread_cancel(thr);\n"
2503 "    if (s != 0)\n"
2504 "        handle_error_en(s, \"pthread_cancel\");\n"
2505 msgstr ""
2506
2507 #. type: Plain text
2508 #: build/C/man3/pthread_cancel.3:208
2509 #, no-wrap
2510 msgid "    /* Join with thread to see what its exit status was */\n"
2511 msgstr ""
2512
2513 #. type: Plain text
2514 #: build/C/man3/pthread_cancel.3:212 build/C/man3/pthread_cleanup_push.3:300
2515 #, no-wrap
2516 msgid ""
2517 "    s = pthread_join(thr, &res);\n"
2518 "    if (s != 0)\n"
2519 "        handle_error_en(s, \"pthread_join\");\n"
2520 msgstr ""
2521
2522 #. type: Plain text
2523 #: build/C/man3/pthread_cancel.3:219
2524 #, no-wrap
2525 msgid ""
2526 "    if (res == PTHREAD_CANCELED)\n"
2527 "        printf(\"main(): thread was canceled\\en\");\n"
2528 "    else\n"
2529 "        printf(\"main(): thread wasn\\(aqt canceled (shouldn\\(aqt "
2530 "happen!)\\en\");\n"
2531 "    exit(EXIT_SUCCESS);\n"
2532 "}\n"
2533 msgstr ""
2534
2535 #. type: Plain text
2536 #: build/C/man3/pthread_cancel.3:230
2537 msgid ""
2538 "B<pthread_cleanup_push>(3), B<pthread_create>(3), B<pthread_exit>(3), "
2539 "B<pthread_join>(3), B<pthread_key_create>(3), B<pthread_setcancelstate>(3), "
2540 "B<pthread_setcanceltype>(3), B<pthread_testcancel>(3), B<pthreads>(7)"
2541 msgstr ""
2542
2543 #. type: TH
2544 #: build/C/man3/pthread_cleanup_push.3:24
2545 #, no-wrap
2546 msgid "PTHREAD_CLEANUP_PUSH"
2547 msgstr ""
2548
2549 #. type: TH
2550 #: build/C/man3/pthread_cleanup_push.3:24 build/C/man3/pthread_setcancelstate.3:24
2551 #, no-wrap
2552 msgid "2008-11-24"
2553 msgstr ""
2554
2555 #. type: Plain text
2556 #: build/C/man3/pthread_cleanup_push.3:28
2557 msgid ""
2558 "pthread_cleanup_push, pthread_cleanup_pop - push and pop thread cancellation "
2559 "clean-up handlers"
2560 msgstr ""
2561
2562 #. type: Plain text
2563 #: build/C/man3/pthread_cleanup_push.3:35
2564 #, no-wrap
2565 msgid ""
2566 "B<void pthread_cleanup_push(void (*>I<routine>B<)(void *),>\n"
2567 "B<                          void *>I<arg>B<);>\n"
2568 "B<void pthread_cleanup_pop(int >I<execute>B<);>\n"
2569 msgstr ""
2570
2571 #. type: Plain text
2572 #: build/C/man3/pthread_cleanup_push.3:45
2573 msgid ""
2574 "These functions manipulate the calling thread's stack of thread-cancellation "
2575 "clean-up handlers.  A clean-up handler is a function that is automatically "
2576 "executed when a thread is canceled (or in various other circumstances "
2577 "described below); it might, for example, unlock a mutex so that it becomes "
2578 "available to other threads in the process."
2579 msgstr ""
2580
2581 #. type: Plain text
2582 #: build/C/man3/pthread_cleanup_push.3:56
2583 msgid ""
2584 "The B<pthread_cleanup_push>()  function pushes I<routine> onto the top of "
2585 "the stack of clean-up handlers.  When I<routine> is later invoked, it will "
2586 "be given I<arg> as its argument."
2587 msgstr ""
2588
2589 #. type: Plain text
2590 #: build/C/man3/pthread_cleanup_push.3:63
2591 msgid ""
2592 "The B<pthread_cleanup_pop>()  function removes the routine at the top of the "
2593 "stack of clean-up handlers, and optionally executes it if I<execute> is "
2594 "nonzero."
2595 msgstr ""
2596
2597 #. type: Plain text
2598 #: build/C/man3/pthread_cleanup_push.3:66
2599 msgid ""
2600 "A cancellation clean-up handler is popped from the stack and executed in the "
2601 "following circumstances:"
2602 msgstr ""
2603
2604 #. type: Plain text
2605 #: build/C/man3/pthread_cleanup_push.3:70
2606 msgid ""
2607 "When a thread is canceled, all of the stacked clean-up handlers are popped "
2608 "and executed in the reverse of the order in which they were pushed onto the "
2609 "stack."
2610 msgstr ""
2611
2612 #. type: Plain text
2613 #: build/C/man3/pthread_cleanup_push.3:78
2614 msgid ""
2615 "When a thread terminates by calling B<pthread_exit>(3), all clean-up "
2616 "handlers are executed as described in the preceding point.  (Clean-up "
2617 "handlers are I<not> called if the thread terminates by performing a "
2618 "I<return> from the thread start function.)"
2619 msgstr ""
2620
2621 #. type: Plain text
2622 #: build/C/man3/pthread_cleanup_push.3:84
2623 msgid ""
2624 "When a thread calls B<pthread_cleanup_pop>()  with a nonzero I<execute> "
2625 "argument, the top-most clean-up handler is popped and executed."
2626 msgstr ""
2627
2628 #. type: Plain text
2629 #: build/C/man3/pthread_cleanup_push.3:96
2630 msgid ""
2631 "POSIX.1 permits B<pthread_cleanup_push>()  and B<pthread_cleanup_pop>()  to "
2632 "be implemented as macros that expand to text containing \\(aqB<{>\\(aq and "
2633 "\\(aqB<}>\\(aq, respectively.  For this reason, the caller must ensure that "
2634 "calls to these functions are paired within the same function, and at the "
2635 "same lexical nesting level.  (In other words, a clean-up handler is only "
2636 "established during the execution of a specified section of code.)"
2637 msgstr ""
2638
2639 #. type: Plain text
2640 #: build/C/man3/pthread_cleanup_push.3:116
2641 msgid ""
2642 "Calling B<longjmp>(3)  (B<siglongjmp>(3))  produces undefined results if any "
2643 "call has been made to B<pthread_cleanup_push>()  or B<pthread_cleanup_pop>()  "
2644 "without the matching call of the pair since the jump buffer was filled by "
2645 "B<setjmp>(3)  (B<sigsetjmp>(3)).  Likewise, calling B<longjmp>(3)  "
2646 "(B<siglongjmp>(3))  from inside a clean-up handler produces undefined "
2647 "results unless the jump buffer was also filled by B<setjmp>(3)  "
2648 "(B<sigsetjmp>(3))  inside the handler."
2649 msgstr ""
2650
2651 #. type: Plain text
2652 #: build/C/man3/pthread_cleanup_push.3:118
2653 msgid "These functions do not return a value."
2654 msgstr ""
2655
2656 #.  SH VERSIONS
2657 #.  Available since glibc 2.0
2658 #. type: Plain text
2659 #: build/C/man3/pthread_cleanup_push.3:122
2660 msgid "There are no errors."
2661 msgstr ""
2662
2663 #. type: Plain text
2664 #: build/C/man3/pthread_cleanup_push.3:133
2665 msgid ""
2666 "On Linux, the B<pthread_cleanup_push>()  and B<pthread_cleanup_pop>()  "
2667 "functions I<are> implemented as macros that expand to text containing "
2668 "\\(aqB<{>\\(aq and \\(aqB<}>\\(aq, respectively.  This means that variables "
2669 "declared within the scope of paired calls to these functions will only be "
2670 "visible within that scope."
2671 msgstr ""
2672
2673 #.  The text was actually added in the 2004 TC2
2674 #. type: Plain text
2675 #: build/C/man3/pthread_cleanup_push.3:148
2676 msgid ""
2677 "POSIX.1 says that the effect of using I<return>, I<break>, I<continue>, or "
2678 "I<goto> to prematurely leave a block bracketed B<pthread_cleanup_push>()  "
2679 "and B<pthread_cleanup_pop>()  is undefined.  Portable applications should "
2680 "avoid doing this."
2681 msgstr ""
2682
2683 #. type: Plain text
2684 #: build/C/man3/pthread_cleanup_push.3:163
2685 msgid ""
2686 "The program below provides a simple example of the use of the functions "
2687 "described in this page.  The program creates a thread that executes a loop "
2688 "bracketed by B<pthread_cleanup_push>()  and B<pthread_cleanup_pop>().  This "
2689 "loop increments a global variable, I<cnt>, once each second.  Depending on "
2690 "what command-line arguments are supplied, the main thread sends the other "
2691 "thread a cancellation request, or sets a global variable that causes the "
2692 "other thread to exit its loop and terminate normally (by doing a I<return>)."
2693 msgstr ""
2694
2695 #. type: Plain text
2696 #: build/C/man3/pthread_cleanup_push.3:166
2697 msgid ""
2698 "In the following shell session, the main thread sends a cancellation request "
2699 "to the other thread:"
2700 msgstr ""
2701
2702 #. type: Plain text
2703 #: build/C/man3/pthread_cleanup_push.3:176
2704 #, no-wrap
2705 msgid ""
2706 "$ B<./a.out>\n"
2707 "New thread started\n"
2708 "cnt = 0\n"
2709 "cnt = 1\n"
2710 "Canceling thread\n"
2711 "Called clean-up handler\n"
2712 "Thread was canceled; cnt = 0\n"
2713 msgstr ""
2714
2715 #. type: Plain text
2716 #: build/C/man3/pthread_cleanup_push.3:184
2717 msgid ""
2718 "From the above, we see that the thread was canceled, and that the "
2719 "cancellation clean-up handler was called and it reset the value of the "
2720 "global variable I<cnt> to 0."
2721 msgstr ""
2722
2723 #. type: Plain text
2724 #: build/C/man3/pthread_cleanup_push.3:187
2725 msgid ""
2726 "In the next run, the main program sets a global variable that causes other "
2727 "thread to terminate normally:"
2728 msgstr ""
2729
2730 #. type: Plain text
2731 #: build/C/man3/pthread_cleanup_push.3:195
2732 #, no-wrap
2733 msgid ""
2734 "$ B<./a.out x>\n"
2735 "New thread started\n"
2736 "cnt = 0\n"
2737 "cnt = 1\n"
2738 "Thread terminated normally; cnt = 2\n"
2739 msgstr ""
2740
2741 #. type: Plain text
2742 #: build/C/man3/pthread_cleanup_push.3:203
2743 msgid ""
2744 "From the above, we see that the clean-up handler was not executed (because "
2745 "I<cleanup_pop_arg> was 0), and therefore the value of I<cnt> was not reset."
2746 msgstr ""
2747
2748 #. type: Plain text
2749 #: build/C/man3/pthread_cleanup_push.3:208
2750 msgid ""
2751 "In the next run, the main program sets a global variable that causes the "
2752 "other thread to terminate normally, and supplies a nonzero value for "
2753 "I<cleanup_pop_arg>:"
2754 msgstr ""
2755
2756 #. type: Plain text
2757 #: build/C/man3/pthread_cleanup_push.3:217
2758 #, no-wrap
2759 msgid ""
2760 "$ B<./a.out x 1>\n"
2761 "New thread started\n"
2762 "cnt = 0\n"
2763 "cnt = 1\n"
2764 "Called clean-up handler\n"
2765 "Thread terminated normally; cnt = 0\n"
2766 msgstr ""
2767
2768 #. type: Plain text
2769 #: build/C/man3/pthread_cleanup_push.3:224
2770 msgid ""
2771 "In the above, we see that although the thread was not canceled, the clean-up "
2772 "handler was executed, because the argument given to B<pthread_cleanup_pop>()  "
2773 "was nonzero."
2774 msgstr ""
2775
2776 #. type: Plain text
2777 #: build/C/man3/pthread_cleanup_push.3:233
2778 #, no-wrap
2779 msgid ""
2780 "#include E<lt>pthread.hE<gt>\n"
2781 "#include E<lt>sys/types.hE<gt>\n"
2782 "#include E<lt>stdio.hE<gt>\n"
2783 "#include E<lt>stdlib.hE<gt>\n"
2784 "#include E<lt>unistd.hE<gt>\n"
2785 "#include E<lt>errno.hE<gt>\n"
2786 msgstr ""
2787
2788 #. type: Plain text
2789 #: build/C/man3/pthread_cleanup_push.3:240
2790 #, no-wrap
2791 msgid ""
2792 "static int done = 0;\n"
2793 "static int cleanup_pop_arg = 0;\n"
2794 "static int cnt = 0;\n"
2795 msgstr ""
2796
2797 #. type: Plain text
2798 #: build/C/man3/pthread_cleanup_push.3:247
2799 #, no-wrap
2800 msgid ""
2801 "static void\n"
2802 "cleanup_handler(void *arg)\n"
2803 "{\n"
2804 "    printf(\"Called clean-up handler\\en\");\n"
2805 "    cnt = 0;\n"
2806 "}\n"
2807 msgstr ""
2808
2809 #. type: Plain text
2810 #: build/C/man3/pthread_cleanup_push.3:252
2811 #, no-wrap
2812 msgid ""
2813 "static void *\n"
2814 "thread_start(void *arg)\n"
2815 "{\n"
2816 "    time_t start, curr;\n"
2817 msgstr ""
2818
2819 #. type: Plain text
2820 #: build/C/man3/pthread_cleanup_push.3:254
2821 #, no-wrap
2822 msgid "    printf(\"New thread started\\en\");\n"
2823 msgstr ""
2824
2825 #. type: Plain text
2826 #: build/C/man3/pthread_cleanup_push.3:256
2827 #, no-wrap
2828 msgid "    pthread_cleanup_push(cleanup_handler, NULL);\n"
2829 msgstr ""
2830
2831 #. type: Plain text
2832 #: build/C/man3/pthread_cleanup_push.3:258
2833 #, no-wrap
2834 msgid "    curr = start = time(NULL);\n"
2835 msgstr ""
2836
2837 #. type: Plain text
2838 #: build/C/man3/pthread_cleanup_push.3:267
2839 #, no-wrap
2840 msgid ""
2841 "    while (!done) {\n"
2842 "        pthread_testcancel();           /* A cancellation point */\n"
2843 "        if (curr E<lt> time(NULL)) {\n"
2844 "            curr = time(NULL);\n"
2845 "            printf(\"cnt = %d\\en\", cnt);  /* A cancellation point */\n"
2846 "            cnt++;\n"
2847 "        }\n"
2848 "    }\n"
2849 msgstr ""
2850
2851 #. type: Plain text
2852 #: build/C/man3/pthread_cleanup_push.3:271
2853 #, no-wrap
2854 msgid ""
2855 "    pthread_cleanup_pop(cleanup_pop_arg);\n"
2856 "    return NULL;\n"
2857 "}\n"
2858 msgstr ""
2859
2860 #. type: Plain text
2861 #: build/C/man3/pthread_cleanup_push.3:278
2862 #, no-wrap
2863 msgid ""
2864 "int\n"
2865 "main(int argc, char *argv[])\n"
2866 "{\n"
2867 "    pthread_t thr;\n"
2868 "    int s;\n"
2869 "    void *res;\n"
2870 msgstr ""
2871
2872 #. type: Plain text
2873 #: build/C/man3/pthread_cleanup_push.3:282
2874 #, no-wrap
2875 msgid ""
2876 "    s = pthread_create(&thr, NULL, thread_start, NULL);\n"
2877 "    if (s != 0)\n"
2878 "        handle_error_en(s, \"pthread_create\");\n"
2879 msgstr ""
2880
2881 #. type: Plain text
2882 #: build/C/man3/pthread_cleanup_push.3:284
2883 #, no-wrap
2884 msgid "    sleep(2);           /* Allow new thread to run a while */\n"
2885 msgstr ""
2886
2887 #. type: Plain text
2888 #: build/C/man3/pthread_cleanup_push.3:289
2889 #, no-wrap
2890 msgid ""
2891 "    if (argc E<gt> 1) {\n"
2892 "        if (argc E<gt> 2)\n"
2893 "            cleanup_pop_arg = atoi(argv[2]);\n"
2894 "        done = 1;\n"
2895 msgstr ""
2896
2897 #. type: Plain text
2898 #: build/C/man3/pthread_cleanup_push.3:296
2899 #, no-wrap
2900 msgid ""
2901 "    } else {\n"
2902 "        printf(\"Canceling thread\\en\");\n"
2903 "        s = pthread_cancel(thr);\n"
2904 "        if (s != 0)\n"
2905 "            handle_error_en(s, \"pthread_cancel\");\n"
2906 "    }\n"
2907 msgstr ""
2908
2909 #. type: Plain text
2910 #: build/C/man3/pthread_cleanup_push.3:307
2911 #, no-wrap
2912 msgid ""
2913 "    if (res == PTHREAD_CANCELED)\n"
2914 "        printf(\"Thread was canceled; cnt = %d\\en\", cnt);\n"
2915 "    else\n"
2916 "        printf(\"Thread terminated normally; cnt = %d\\en\", cnt);\n"
2917 "    exit(EXIT_SUCCESS);\n"
2918 "}\n"
2919 msgstr ""
2920
2921 #. type: Plain text
2922 #: build/C/man3/pthread_cleanup_push.3:314
2923 msgid ""
2924 "B<pthread_cancel>(3), B<pthread_cleanup_push_defer_np>(3), "
2925 "B<pthread_setcancelstate>(3), B<pthread_testcancel>(3), B<pthreads>(7)"
2926 msgstr ""
2927
2928 #. type: TH
2929 #: build/C/man3/pthread_cleanup_push_defer_np.3:24
2930 #, no-wrap
2931 msgid "PTHREAD_CLEANUP_PUSH_DEFER_NP"
2932 msgstr ""
2933
2934 #. type: TH
2935 #: build/C/man3/pthread_cleanup_push_defer_np.3:24
2936 #, no-wrap
2937 msgid "2008-12-04"
2938 msgstr ""
2939
2940 #. type: Plain text
2941 #: build/C/man3/pthread_cleanup_push_defer_np.3:28
2942 msgid ""
2943 "pthread_cleanup_push_defer_np, pthread_cleanup_pop_restore_np - push and pop "
2944 "thread cancellation clean-up handlers while saving cancelability type"
2945 msgstr ""
2946
2947 #. type: Plain text
2948 #: build/C/man3/pthread_cleanup_push_defer_np.3:35
2949 #, no-wrap
2950 msgid ""
2951 "B<void pthread_cleanup_push_defer_np(void (*>I<routine>B<)(void *),>\n"
2952 "B<                                   void *>I<arg>B<);>\n"
2953 "B<void pthread_cleanup_pop_restore_np(int >I<execute>B<);>\n"
2954 msgstr ""
2955
2956 #. type: Plain text
2957 #: build/C/man3/pthread_cleanup_push_defer_np.3:43
2958 msgid ""
2959 "These functions are the same as B<pthread_cleanup_push>(3)  and "
2960 "B<pthread_cleanup_pop>(3), except for the differences noted on this page."
2961 msgstr ""
2962
2963 #. type: Plain text
2964 #: build/C/man3/pthread_cleanup_push_defer_np.3:56
2965 msgid ""
2966 "Like B<pthread_cleanup_push>(3), B<pthread_cleanup_push_defer_np>()  pushes "
2967 "I<routine> onto the thread's stack of cancellation clean-up handlers.  In "
2968 "addition, it also saves the thread's current cancelability type, and sets "
2969 "the cancelability type to \"deferred\" (see B<pthread_setcanceltype>(3)); "
2970 "this ensures that cancellation clean-up will occur even if the thread's "
2971 "cancelability type was \"asynchronous\" before the the call."
2972 msgstr ""
2973
2974 #. type: Plain text
2975 #: build/C/man3/pthread_cleanup_push_defer_np.3:65
2976 msgid ""
2977 "Like B<pthread_cleanup_pop>(3), B<pthread_cleanup_pop_restore_np>()  pops "
2978 "the top-most clean-up handler from the thread's stack of cancellation "
2979 "clean-up handlers.  In addition, it restores the thread's cancelability type "
2980 "to its value at the time of the matching B<pthread_cleanup_push_defer_np>()."
2981 msgstr ""
2982
2983 #. type: Plain text
2984 #: build/C/man3/pthread_cleanup_push_defer_np.3:71
2985 msgid ""
2986 "The caller must ensure that calls to these functions are paired within the "
2987 "same function, and at the same lexical nesting level.  Other restrictions "
2988 "apply, as described in B<pthread_cleanup_push>(3)."
2989 msgstr ""
2990
2991 #. type: Plain text
2992 #: build/C/man3/pthread_cleanup_push_defer_np.3:73
2993 msgid "This sequence of calls:"
2994 msgstr ""
2995
2996 #. type: Plain text
2997 #: build/C/man3/pthread_cleanup_push_defer_np.3:78
2998 #, no-wrap
2999 msgid ""
3000 "pthread_cleanup_push_defer_np(routine, arg);\n"
3001 "pthread_cleanup_pop_restore_np(execute);\n"
3002 msgstr ""
3003
3004 #. type: Plain text
3005 #: build/C/man3/pthread_cleanup_push_defer_np.3:82
3006 msgid "is equivalent to (but shorter and more efficient than):"
3007 msgstr ""
3008
3009 #. type: Plain text
3010 #: build/C/man3/pthread_cleanup_push_defer_np.3:88
3011 #, no-wrap
3012 msgid "int oldtype;\n"
3013 msgstr ""
3014
3015 #. type: Plain text
3016 #: build/C/man3/pthread_cleanup_push_defer_np.3:94
3017 #, no-wrap
3018 msgid ""
3019 "pthread_cleanup_push(routine, arg);\n"
3020 "pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);\n"
3021 "\\&...\n"
3022 "pthread_setcanceltype(oldtype, NULL);\n"
3023 "pthread_cleanup_pop(execute);\n"
3024 msgstr ""
3025
3026 #. type: Plain text
3027 #: build/C/man3/pthread_cleanup_push_defer_np.3:107
3028 msgid ""
3029 "B<pthread_cancel>(3), B<pthread_cleanup_push>(3), "
3030 "B<pthread_setcancelstate>(3), B<pthread_testcancel>(3), B<pthreads>(7)"
3031 msgstr ""
3032
3033 #. type: TH
3034 #: build/C/man3/pthread_create.3:24
3035 #, no-wrap
3036 msgid "PTHREAD_CREATE"
3037 msgstr ""
3038
3039 #. type: Plain text
3040 #: build/C/man3/pthread_create.3:27
3041 msgid "pthread_create - create a new thread"
3042 msgstr ""
3043
3044 #. type: Plain text
3045 #: build/C/man3/pthread_create.3:33
3046 #, no-wrap
3047 msgid ""
3048 "B<int pthread_create(pthread_t *>I<thread>B<, const pthread_attr_t "
3049 "*>I<attr>B<,>\n"
3050 "B<                   void *(*>I<start_routine>B<) (void *), void "
3051 "*>I<arg>B<);>\n"
3052 msgstr ""
3053
3054 #. type: Plain text
3055 #: build/C/man3/pthread_create.3:36 build/C/man3/pthread_detach.3:35 build/C/man3/pthread_join.3:35 build/C/man3/pthread_kill.3:35 build/C/man3/pthread_sigmask.3:36 build/C/man3/pthread_sigqueue.3:35 build/C/man3/pthread_tryjoin_np.3:40 build/C/man3/pthread_yield.3:34
3056 msgid "Compile and link with I<-pthread>."
3057 msgstr ""
3058
3059 #. type: Plain text
3060 #: build/C/man3/pthread_create.3:45
3061 msgid ""
3062 "The B<pthread_create>()  function starts a new thread in the calling "
3063 "process.  The new thread starts execution by invoking I<start_routine>(); "
3064 "I<arg> is passed as the sole argument of I<start_routine>()."
3065 msgstr ""
3066
3067 #. type: Plain text
3068 #: build/C/man3/pthread_create.3:47
3069 msgid "The new thread terminates in one of the following ways:"
3070 msgstr ""
3071
3072 #. type: IP
3073 #: build/C/man3/pthread_create.3:47 build/C/man3/pthread_create.3:53 build/C/man3/pthread_create.3:61 build/C/man3/pthread_create.3:64 build/C/man3/pthread_getattr_np.3:49 build/C/man3/pthread_getattr_np.3:52 build/C/man3/pthread_getattr_np.3:55
3074 #, no-wrap
3075 msgid "*"
3076 msgstr ""
3077
3078 #. type: Plain text
3079 #: build/C/man3/pthread_create.3:53
3080 msgid ""
3081 "It calls B<pthread_exit>(3), specifying an exit status value that is "
3082 "available to another thread in the same process that calls "
3083 "B<pthread_join>(3)."
3084 msgstr ""
3085
3086 #. type: Plain text
3087 #: build/C/man3/pthread_create.3:61
3088 msgid ""
3089 "It returns from I<start_routine>().  This is equivalent to calling "
3090 "B<pthread_exit>(3)  with the value supplied in the I<return> statement."
3091 msgstr ""
3092
3093 #. type: Plain text
3094 #: build/C/man3/pthread_create.3:64
3095 msgid "It is canceled (see B<pthread_cancel>(3))."
3096 msgstr ""
3097
3098 #. type: Plain text
3099 #: build/C/man3/pthread_create.3:70
3100 msgid ""
3101 "Any of the threads in the process calls B<exit>(3), or the main thread "
3102 "performs a return from I<main>().  This causes the termination of all "
3103 "threads in the process."
3104 msgstr ""
3105
3106 #. type: Plain text
3107 #: build/C/man3/pthread_create.3:84
3108 msgid ""
3109 "The I<attr> argument points to a I<pthread_attr_t> structure whose contents "
3110 "are used at thread creation time to determine attributes for the new thread; "
3111 "this structure is initialized using B<pthread_attr_init>(3)  and related "
3112 "functions.  If I<attr> is NULL, then the thread is created with default "
3113 "attributes."
3114 msgstr ""
3115
3116 #. type: Plain text
3117 #: build/C/man3/pthread_create.3:91
3118 msgid ""
3119 "Before returning, a successful call to B<pthread_create>()  stores the ID of "
3120 "the new thread in the buffer pointed to by I<thread>; this identifier is "
3121 "used to refer to the thread in subsequent calls to other pthreads functions."
3122 msgstr ""
3123
3124 #. type: Plain text
3125 #: build/C/man3/pthread_create.3:99
3126 msgid ""
3127 "The new thread inherits a copy of the creating thread's signal mask "
3128 "(B<pthread_sigmask>(3)).  The set of pending signals for the new thread is "
3129 "empty (B<sigpending>(2)).  The new thread does not inherit the creating "
3130 "thread's alternate signal stack (B<sigaltstack>(2))."
3131 msgstr ""
3132
3133 #. type: Plain text
3134 #: build/C/man3/pthread_create.3:102
3135 msgid ""
3136 "The new thread inherits the calling thread's floating-point environment "
3137 "(B<fenv>(3))."
3138 msgstr ""
3139
3140 #.  CLOCK_THREAD_CPUTIME_ID in clock_gettime(2)
3141 #. type: Plain text
3142 #: build/C/man3/pthread_create.3:107
3143 msgid ""
3144 "The initial value of the new thread's CPU-time clock is 0 (see "
3145 "B<pthread_getcpuclockid>(3))."
3146 msgstr ""
3147
3148 #. type: SS
3149 #: build/C/man3/pthread_create.3:107
3150 #, no-wrap
3151 msgid "Linux-specific details"
3152 msgstr ""
3153
3154 #. type: Plain text
3155 #: build/C/man3/pthread_create.3:113
3156 msgid ""
3157 "The new thread inherits copies of the calling thread's capability sets (see "
3158 "B<capabilities>(7))  and CPU affinity mask (see B<sched_setaffinity>(2))."
3159 msgstr ""
3160
3161 #. type: Plain text
3162 #: build/C/man3/pthread_create.3:120
3163 msgid ""
3164 "On success, B<pthread_create>()  returns 0; on error, it returns an error "
3165 "number, and the contents of I<*thread> are undefined."
3166 msgstr ""
3167
3168 #. type: TP
3169 #: build/C/man3/pthread_create.3:121 build/C/man3/pthread_sigqueue.3:69
3170 #, no-wrap
3171 msgid "B<EAGAIN>"
3172 msgstr ""
3173
3174 #. type: Plain text
3175 #: build/C/man3/pthread_create.3:135
3176 msgid ""
3177 "Insufficient resources to create another thread, or a system-imposed limit "
3178 "on the number of threads was encountered.  The latter case may occur in two "
3179 "ways: the B<RLIMIT_NPROC> soft resource limit (set via B<setrlimit>(2)), "
3180 "which limits the number of process for a real user ID, was reached; or the "
3181 "kernel's system-wide limit on the number of threads, "
3182 "I</proc/sys/kernel/threads-max>, was reached."
3183 msgstr ""
3184
3185 #. type: Plain text
3186 #: build/C/man3/pthread_create.3:139
3187 msgid "Invalid settings in I<attr>."
3188 msgstr ""
3189
3190 #. type: TP
3191 #: build/C/man3/pthread_create.3:139 build/C/man3/pthread_setschedparam.3:126 build/C/man3/pthread_setschedprio.3:63
3192 #, no-wrap
3193 msgid "B<EPERM>"
3194 msgstr ""
3195
3196 #. type: Plain text
3197 #: build/C/man3/pthread_create.3:144
3198 msgid ""
3199 "No permission to set the scheduling policy and parameters specified in "
3200 "I<attr>."
3201 msgstr ""
3202
3203 #. type: Plain text
3204 #: build/C/man3/pthread_create.3:158
3205 msgid ""
3206 "See B<pthread_self>(3)  for further information on the thread ID returned in "
3207 "I<*thread> by B<pthread_create>().  Unless real-time scheduling policies are "
3208 "being employed, after a call to B<pthread_create>(), it is indeterminate "
3209 "which thread\\(emthe caller or the new thread\\(emwill next execute."
3210 msgstr ""
3211
3212 #. type: Plain text
3213 #: build/C/man3/pthread_create.3:178
3214 msgid ""
3215 "A thread may either be I<joinable> or I<detached>.  If a thread is joinable, "
3216 "then another thread can call B<pthread_join>(3)  to wait for the thread to "
3217 "terminate and fetch its exit status.  Only when a terminated joinable thread "
3218 "has been joined are the last of its resources released back to the system.  "
3219 "When a detached thread terminates, its resources are automatically released "
3220 "back to the system: it is not possible to join with the thread in order to "
3221 "obtain its exit status.  Making a thread detached is useful for some types "
3222 "of daemon threads whose exit status the application does not need to care "
3223 "about.  By default, a new thread is created in a joinable state, unless "
3224 "I<attr> was set to create the thread in a detached state (using "
3225 "B<pthread_attr_setdetachstate>(3))."
3226 msgstr ""
3227
3228 #.  FIXME . Perhaps some of the following detail should be in
3229 #.  a future pthread_attr_setstacksize(3) page.
3230 #. type: Plain text
3231 #: build/C/man3/pthread_create.3:194
3232 msgid ""
3233 "On Linux/x86-32, the default stack size for a new thread is 2 megabytes.  "
3234 "Under the NPTL threading implementation, if the B<RLIMIT_STACK> soft "
3235 "resource limit I<at the time the program started> has any value other than "
3236 "\"unlimited\", then it determines the default stack size of new threads.  "
3237 "Using B<pthread_attr_setstacksize>(3), the stack size attribute can be "
3238 "explicitly set in the I<attr> argument used to create a thread, in order to "
3239 "obtain a stack size other than the default."
3240 msgstr ""
3241
3242 #. type: Plain text
3243 #: build/C/man3/pthread_create.3:198
3244 msgid ""
3245 "The program below demonstrates the use of B<pthread_create>(), as well as a "
3246 "number of other functions in the pthreads API."
3247 msgstr ""
3248
3249 #. type: Plain text
3250 #: build/C/man3/pthread_create.3:203
3251 msgid ""
3252 "In the following run, on a system providing the NPTL threading "
3253 "implementation, the stack size defaults to the value given by the \"stack "
3254 "size\" resource limit:"
3255 msgstr ""
3256
3257 #. type: Plain text
3258 #: build/C/man3/pthread_create.3:215
3259 #, no-wrap
3260 msgid ""
3261 "$B< ulimit -s>\n"
3262 "8192            # The stack size limit is 8 MB (0x80000 bytes)\n"
3263 "$B< ./a.out hola salut servus>\n"
3264 "Thread 1: top of stack near 0xb7dd03b8; argv_string=hola\n"
3265 "Thread 2: top of stack near 0xb75cf3b8; argv_string=salut\n"
3266 "Thread 3: top of stack near 0xb6dce3b8; argv_string=servus\n"
3267 "Joined with thread 1; returned value was HOLA\n"
3268 "Joined with thread 2; returned value was SALUT\n"
3269 "Joined with thread 3; returned value was SERVUS\n"
3270 msgstr ""
3271
3272 #. type: Plain text
3273 #: build/C/man3/pthread_create.3:221
3274 msgid ""
3275 "In the next run, the program explicitly sets a stack size of 1MB (using "
3276 "B<pthread_attr_setstacksize>(3))  for the created threads:"
3277 msgstr ""
3278
3279 #. type: Plain text
3280 #: build/C/man3/pthread_create.3:231
3281 #, no-wrap
3282 msgid ""
3283 "$B< ./a.out -s 0x100000 hola salut servus>\n"
3284 "Thread 1: top of stack near 0xb7d723b8; argv_string=hola\n"
3285 "Thread 2: top of stack near 0xb7c713b8; argv_string=salut\n"
3286 "Thread 3: top of stack near 0xb7b703b8; argv_string=servus\n"
3287 "Joined with thread 1; returned value was HOLA\n"
3288 "Joined with thread 2; returned value was SALUT\n"
3289 "Joined with thread 3; returned value was SERVUS\n"
3290 msgstr ""
3291
3292 #. type: Plain text
3293 #: build/C/man3/pthread_create.3:243
3294 #, no-wrap
3295 msgid ""
3296 "#include E<lt>pthread.hE<gt>\n"
3297 "#include E<lt>string.hE<gt>\n"
3298 "#include E<lt>stdio.hE<gt>\n"
3299 "#include E<lt>stdlib.hE<gt>\n"
3300 "#include E<lt>unistd.hE<gt>\n"
3301 "#include E<lt>errno.hE<gt>\n"
3302 "#include E<lt>ctype.hE<gt>\n"
3303 msgstr ""
3304
3305 #. type: Plain text
3306 #: build/C/man3/pthread_create.3:249 build/C/man3/pthread_getcpuclockid.3:107
3307 #, no-wrap
3308 msgid ""
3309 "#define handle_error(msg) \\e\n"
3310 "        do { perror(msg); exit(EXIT_FAILURE); } while (0)\n"
3311 msgstr ""
3312
3313 #. type: Plain text
3314 #: build/C/man3/pthread_create.3:255
3315 #, no-wrap
3316 msgid ""
3317 "struct thread_info {    /* Used as argument to thread_start() */\n"
3318 "    pthread_t thread_id;        /* ID returned by pthread_create() */\n"
3319 "    int       thread_num;       /* Application-defined thread # */\n"
3320 "    char     *argv_string;      /* From command-line argument */\n"
3321 "};\n"
3322 msgstr ""
3323
3324 #. type: Plain text
3325 #: build/C/man3/pthread_create.3:258
3326 #, no-wrap
3327 msgid ""
3328 "/* Thread start function: display address near top of our stack,\n"
3329 "   and return upper-cased copy of argv_string */\n"
3330 msgstr ""
3331
3332 #. type: Plain text
3333 #: build/C/man3/pthread_create.3:264
3334 #, no-wrap
3335 msgid ""
3336 "static void *\n"
3337 "thread_start(void *arg)\n"
3338 "{\n"
3339 "    struct thread_info *tinfo = (struct thread_info *) arg;\n"
3340 "    char *uargv, *p;\n"
3341 msgstr ""
3342
3343 #. type: Plain text
3344 #: build/C/man3/pthread_create.3:267
3345 #, no-wrap
3346 msgid ""
3347 "    printf(\"Thread %d: top of stack near %p; argv_string=%s\\en\",\n"
3348 "            tinfo-E<gt>thread_num, &p, tinfo-E<gt>argv_string);\n"
3349 msgstr ""
3350
3351 #. type: Plain text
3352 #: build/C/man3/pthread_create.3:271
3353 #, no-wrap
3354 msgid ""
3355 "    uargv = strdup(tinfo-E<gt>argv_string);\n"
3356 "    if (uargv == NULL)\n"
3357 "        handle_error(\"strdup\");\n"
3358 msgstr ""
3359
3360 #. type: Plain text
3361 #: build/C/man3/pthread_create.3:274
3362 #, no-wrap
3363 msgid ""
3364 "    for (p = uargv; *p != \\(aq\\e0\\(aq; p++)\n"
3365 "        *p = toupper(*p);\n"
3366 msgstr ""
3367
3368 #. type: Plain text
3369 #: build/C/man3/pthread_create.3:277
3370 #, no-wrap
3371 msgid ""
3372 "    return uargv;\n"
3373 "}\n"
3374 msgstr ""
3375
3376 #. type: Plain text
3377 #: build/C/man3/pthread_create.3:286
3378 #, no-wrap
3379 msgid ""
3380 "int\n"
3381 "main(int argc, char *argv[])\n"
3382 "{\n"
3383 "    int s, tnum, opt, num_threads;\n"
3384 "    struct thread_info *tinfo;\n"
3385 "    pthread_attr_t attr;\n"
3386 "    int stack_size;\n"
3387 "    void *res;\n"
3388 msgstr ""
3389
3390 #. type: Plain text
3391 #: build/C/man3/pthread_create.3:288
3392 #, no-wrap
3393 msgid "    /* The \"-s\" option specifies a stack size for our threads */\n"
3394 msgstr ""
3395
3396 #. type: Plain text
3397 #: build/C/man3/pthread_create.3:295
3398 #, no-wrap
3399 msgid ""
3400 "    stack_size = -1;\n"
3401 "    while ((opt = getopt(argc, argv, \"s:\")) != -1) {\n"
3402 "        switch (opt) {\n"
3403 "        case \\(aqs\\(aq:\n"
3404 "            stack_size = strtoul(optarg, NULL, 0);\n"
3405 "            break;\n"
3406 msgstr ""
3407
3408 #. type: Plain text
3409 #: build/C/man3/pthread_create.3:302
3410 #, no-wrap
3411 msgid ""
3412 "        default:\n"
3413 "            fprintf(stderr, \"Usage: %s [-s stack-size] arg...\\en\",\n"
3414 "                    argv[0]);\n"
3415 "            exit(EXIT_FAILURE);\n"
3416 "        }\n"
3417 "    }\n"
3418 msgstr ""
3419
3420 #. type: Plain text
3421 #: build/C/man3/pthread_create.3:304
3422 #, no-wrap
3423 msgid "    num_threads = argc - optind;\n"
3424 msgstr ""
3425
3426 #. type: Plain text
3427 #: build/C/man3/pthread_create.3:306
3428 #, no-wrap
3429 msgid "    /* Initialize thread creation attributes */\n"
3430 msgstr ""
3431
3432 #. type: Plain text
3433 #: build/C/man3/pthread_create.3:310
3434 #, no-wrap
3435 msgid ""
3436 "    s = pthread_attr_init(&attr);\n"
3437 "    if (s != 0)\n"
3438 "        handle_error_en(s, \"pthread_attr_init\");\n"
3439 msgstr ""
3440
3441 #. type: Plain text
3442 #: build/C/man3/pthread_create.3:316
3443 #, no-wrap
3444 msgid ""
3445 "    if (stack_size E<gt> 0) {\n"
3446 "        s = pthread_attr_setstacksize(&attr, stack_size);\n"
3447 "        if (s != 0)\n"
3448 "            handle_error_en(s, \"pthread_attr_setstacksize\");\n"
3449 "    }\n"
3450 msgstr ""
3451
3452 #. type: Plain text
3453 #: build/C/man3/pthread_create.3:318
3454 #, no-wrap
3455 msgid "    /* Allocate memory for pthread_create() arguments */\n"
3456 msgstr ""
3457
3458 #. type: Plain text
3459 #: build/C/man3/pthread_create.3:322
3460 #, no-wrap
3461 msgid ""
3462 "    tinfo = calloc(num_threads, sizeof(struct thread_info));\n"
3463 "    if (tinfo == NULL)\n"
3464 "        handle_error(\"calloc\");\n"
3465 msgstr ""
3466
3467 #. type: Plain text
3468 #: build/C/man3/pthread_create.3:324
3469 #, no-wrap
3470 msgid "    /* Create one thread for each command-line argument */\n"
3471 msgstr ""
3472
3473 #. type: Plain text
3474 #: build/C/man3/pthread_create.3:328
3475 #, no-wrap
3476 msgid ""
3477 "    for (tnum = 0; tnum E<lt> num_threads; tnum++) {\n"
3478 "        tinfo[tnum].thread_num = tnum + 1;\n"
3479 "        tinfo[tnum].argv_string = argv[optind + tnum];\n"
3480 msgstr ""
3481
3482 #. type: Plain text
3483 #: build/C/man3/pthread_create.3:331
3484 #, no-wrap
3485 msgid ""
3486 "        /* The pthread_create() call stores the thread ID into\n"
3487 "           corresponding element of tinfo[] */\n"
3488 msgstr ""
3489
3490 #. type: Plain text
3491 #: build/C/man3/pthread_create.3:337
3492 #, no-wrap
3493 msgid ""
3494 "        s = pthread_create(&tinfo[tnum].thread_id, &attr,\n"
3495 "                           &thread_start, &tinfo[tnum]);\n"
3496 "        if (s != 0)\n"
3497 "            handle_error_en(s, \"pthread_create\");\n"
3498 "    }\n"
3499 msgstr ""
3500
3501 #. type: Plain text
3502 #: build/C/man3/pthread_create.3:340
3503 #, no-wrap
3504 msgid ""
3505 "    /* Destroy the thread attributes object, since it is no\n"
3506 "       longer needed */\n"
3507 msgstr ""
3508
3509 #. type: Plain text
3510 #: build/C/man3/pthread_create.3:344 build/C/man3/pthread_setschedparam.3:420
3511 #, no-wrap
3512 msgid ""
3513 "    s = pthread_attr_destroy(&attr);\n"
3514 "    if (s != 0)\n"
3515 "        handle_error_en(s, \"pthread_attr_destroy\");\n"
3516 msgstr ""
3517
3518 #. type: Plain text
3519 #: build/C/man3/pthread_create.3:346
3520 #, no-wrap
3521 msgid "    /* Now join with each thread, and display its returned value */\n"
3522 msgstr ""
3523
3524 #. type: Plain text
3525 #: build/C/man3/pthread_create.3:351
3526 #, no-wrap
3527 msgid ""
3528 "    for (tnum = 0; tnum E<lt> num_threads; tnum++) {\n"
3529 "        s = pthread_join(tinfo[tnum].thread_id, &res);\n"
3530 "        if (s != 0)\n"
3531 "            handle_error_en(s, \"pthread_join\");\n"
3532 msgstr ""
3533
3534 #. type: Plain text
3535 #: build/C/man3/pthread_create.3:356
3536 #, no-wrap
3537 msgid ""
3538 "        printf(\"Joined with thread %d; returned value was %s\\en\",\n"
3539 "                tinfo[tnum].thread_num, (char *) res);\n"
3540 "        free(res);      /* Free memory allocated by thread */\n"
3541 "    }\n"
3542 msgstr ""
3543
3544 #. type: Plain text
3545 #: build/C/man3/pthread_create.3:360
3546 #, no-wrap
3547 msgid ""
3548 "    free(tinfo);\n"
3549 "    exit(EXIT_SUCCESS);\n"
3550 "}\n"
3551 msgstr ""
3552
3553 #. type: Plain text
3554 #: build/C/man3/pthread_create.3:367
3555 msgid ""
3556 "In the obsolete LinuxThreads implementation, each of the threads in a "
3557 "process has a different process ID.  This is in violation of the POSIX "
3558 "threads specification, and is the source of many other nonconformances to "
3559 "the standard; see B<pthreads>(7)."
3560 msgstr ""
3561
3562 #. type: Plain text
3563 #: build/C/man3/pthread_create.3:378
3564 msgid ""
3565 "B<getrlimit>(2), B<pthread_attr_init>(3), B<pthread_cancel>(3), "
3566 "B<pthread_detach>(3), B<pthread_equal>(3), B<pthread_exit>(3), "
3567 "B<pthread_getattr_np>(3), B<pthread_join>(3), B<pthread_self>(3), "
3568 "B<pthreads>(7)"
3569 msgstr ""
3570
3571 #. type: TH
3572 #: build/C/man3/pthread_detach.3:24
3573 #, no-wrap
3574 msgid "PTHREAD_DETACH"
3575 msgstr ""
3576
3577 #. type: TH
3578 #: build/C/man3/pthread_detach.3:24 build/C/man3/pthread_join.3:24
3579 #, no-wrap
3580 msgid "2008-11-27"
3581 msgstr ""
3582
3583 #. type: Plain text
3584 #: build/C/man3/pthread_detach.3:27
3585 msgid "pthread_detach - detach a thread"
3586 msgstr ""
3587
3588 #. type: Plain text
3589 #: build/C/man3/pthread_detach.3:32
3590 #, no-wrap
3591 msgid "B<int pthread_detach(pthread_t >I<thread>B<);>\n"
3592 msgstr ""
3593
3594 #. type: Plain text
3595 #: build/C/man3/pthread_detach.3:44
3596 msgid ""
3597 "The B<pthread_detach>()  function marks the thread identified by I<thread> "
3598 "as detached.  When a detached thread terminates, its resources are "
3599 "automatically released back to the system without the need for another "
3600 "thread to join with the terminated thread."
3601 msgstr ""
3602
3603 #. type: Plain text
3604 #: build/C/man3/pthread_detach.3:47
3605 msgid ""
3606 "Attempting to detach an already detached thread results in unspecified "
3607 "behavior."
3608 msgstr ""
3609
3610 #. type: Plain text
3611 #: build/C/man3/pthread_detach.3:52
3612 msgid ""
3613 "On success, B<pthread_detach>()  returns 0; on error, it returns an error "
3614 "number."
3615 msgstr ""
3616
3617 #. type: Plain text
3618 #: build/C/man3/pthread_detach.3:57 build/C/man3/pthread_join.3:87
3619 msgid "I<thread> is not a joinable thread."
3620 msgstr ""
3621
3622 #. type: Plain text
3623 #: build/C/man3/pthread_detach.3:68
3624 msgid ""
3625 "Once a thread has been detached, it can't be joined with B<pthread_join>(3)  "
3626 "or be made joinable again."
3627 msgstr ""
3628
3629 #. type: Plain text
3630 #: build/C/man3/pthread_detach.3:75
3631 msgid ""
3632 "A new thread can be created in a detached state using "
3633 "B<pthread_attr_setdetachstate>(3)  to set the detached attribute of the "
3634 "I<attr> argument of B<pthread_create>(3)."
3635 msgstr ""
3636
3637 #. type: Plain text
3638 #: build/C/man3/pthread_detach.3:82
3639 msgid ""
3640 "The detached attribute merely determines the behavior of the system when the "
3641 "thread terminates; it does not prevent the thread from being terminated if "
3642 "the process terminates using B<exit>(3)  (or equivalently, if the main "
3643 "thread returns)."
3644 msgstr ""
3645
3646 #. type: Plain text
3647 #: build/C/man3/pthread_detach.3:91
3648 msgid ""
3649 "Either B<pthread_join>(3)  or B<pthread_detach>()  should be called for each "
3650 "thread that an application creates, so that system resources for the thread "
3651 "can be released.  (But note that the resources of all threads are freed when "
3652 "the process terminates.)"
3653 msgstr ""
3654
3655 #. type: Plain text
3656 #: build/C/man3/pthread_detach.3:93
3657 msgid "The following statement detaches the calling thread:"
3658 msgstr ""
3659
3660 #. type: Plain text
3661 #: build/C/man3/pthread_detach.3:95
3662 #, no-wrap
3663 msgid "    pthread_detach(pthread_self());\n"
3664 msgstr ""
3665
3666 #. type: Plain text
3667 #: build/C/man3/pthread_detach.3:102
3668 msgid ""
3669 "B<pthread_attr_setdetachstate>(3), B<pthread_cancel>(3), "
3670 "B<pthread_create>(3), B<pthread_exit>(3), B<pthread_join>(3), B<pthreads>(7)"
3671 msgstr ""
3672
3673 #. type: TH
3674 #: build/C/man3/pthread_equal.3:24
3675 #, no-wrap
3676 msgid "PTHREAD_EQUAL"
3677 msgstr ""
3678
3679 #. type: TH
3680 #: build/C/man3/pthread_equal.3:24 build/C/man3/pthread_exit.3:24
3681 #, no-wrap
3682 msgid "2009-03-30"
3683 msgstr ""
3684
3685 #. type: Plain text
3686 #: build/C/man3/pthread_equal.3:27
3687 msgid "pthread_equal - compare thread IDs"
3688 msgstr ""
3689
3690 #. type: Plain text
3691 #: build/C/man3/pthread_equal.3:32
3692 #, no-wrap
3693 msgid "B<int pthread_equal(pthread_t >I<t1>B<, pthread_t >I<t2>B<);>\n"
3694 msgstr ""
3695
3696 #. type: Plain text
3697 #: build/C/man3/pthread_equal.3:38
3698 msgid "The B<pthread_equal>()  function compares two thread identifiers."
3699 msgstr ""
3700
3701 #. type: Plain text
3702 #: build/C/man3/pthread_equal.3:42
3703 msgid ""
3704 "If the two thread IDs are equal, B<pthread_equal>()  returns a nonzero "
3705 "value; otherwise, it returns 0."
3706 msgstr ""
3707
3708 #.  SH VERSIONS
3709 #.  Available since glibc 2.0
3710 #. type: Plain text
3711 #: build/C/man3/pthread_equal.3:44 build/C/man3/pthread_exit.3:72 build/C/man3/pthread_self.3:47 build/C/man3/pthread_testcancel.3:55
3712 msgid "This function always succeeds."
3713 msgstr ""
3714
3715 #. type: Plain text
3716 #: build/C/man3/pthread_equal.3:53
3717 msgid ""
3718 "The B<pthread_equal>()  function is necessary because thread IDs should be "
3719 "considered opaque: there is no portable way for applications to directly "
3720 "compare two I<pthread_t> values."
3721 msgstr ""
3722
3723 #. type: Plain text
3724 #: build/C/man3/pthread_equal.3:57
3725 msgid "B<pthread_create>(3), B<pthread_self>(3), B<pthreads>(7)"
3726 msgstr ""
3727
3728 #. type: TH
3729 #: build/C/man3/pthread_exit.3:24
3730 #, no-wrap
3731 msgid "PTHREAD_EXIT"
3732 msgstr ""
3733
3734 #. type: Plain text
3735 #: build/C/man3/pthread_exit.3:27
3736 msgid "pthread_exit - terminate calling thread"
3737 msgstr ""
3738
3739 #. type: Plain text
3740 #: build/C/man3/pthread_exit.3:32
3741 #, no-wrap
3742 msgid "B<void pthread_exit(void *>I<retval>B<);>\n"
3743 msgstr ""
3744
3745 #. type: Plain text
3746 #: build/C/man3/pthread_exit.3:42
3747 msgid ""
3748 "The B<pthread_exit>()  function terminates the calling thread and returns a "
3749 "value via I<retval> that (if the thread is joinable)  is available to "
3750 "another thread in the same process that calls B<pthread_join>(3)."
3751 msgstr ""
3752
3753 #. type: Plain text
3754 #: build/C/man3/pthread_exit.3:52
3755 msgid ""
3756 "Any clean-up handlers established by B<pthread_cleanup_push>(3)  that have "
3757 "not yet been popped, are popped (in the reverse of the order in which they "
3758 "were pushed)  and executed.  If the thread has any thread-specific data, "
3759 "then, after the clean-up handlers have been executed, the corresponding "
3760 "destructor functions are called, in an unspecified order."
3761 msgstr ""
3762
3763 #. type: Plain text
3764 #: build/C/man3/pthread_exit.3:59
3765 msgid ""
3766 "When a thread terminates, process-shared resources (e.g., mutexes, condition "
3767 "variables, semaphores, and file descriptors) are not released, and functions "
3768 "registered using B<atexit>(3)  are not called."
3769 msgstr ""
3770
3771 #. type: Plain text
3772 #: build/C/man3/pthread_exit.3:68
3773 msgid ""
3774 "After the last thread in a process terminates, the process terminates as by "
3775 "calling B<exit>(3)  with an exit status of zero; thus, process-shared "
3776 "resources are released and functions registered using B<atexit>(3)  are "
3777 "called."
3778 msgstr ""
3779
3780 #. type: Plain text
3781 #: build/C/man3/pthread_exit.3:70
3782 msgid "This function does not return to the caller."
3783 msgstr ""
3784
3785 #. type: Plain text
3786 #: build/C/man3/pthread_exit.3:79
3787 msgid ""
3788 "Performing a return from the start function of any thread other than the "
3789 "main thread results in an implicit call to B<pthread_exit>(), using the "
3790 "function's return value as the thread's exit status."
3791 msgstr ""
3792
3793 #. type: Plain text
3794 #: build/C/man3/pthread_exit.3:85
3795 msgid ""
3796 "To allow other threads to continue execution, the main thread should "
3797 "terminate by calling B<pthread_exit>()  rather than B<exit>(3)."
3798 msgstr ""
3799
3800 #. type: Plain text
3801 #: build/C/man3/pthread_exit.3:90
3802 msgid ""
3803 "The value pointed to by I<retval> should not be located on the calling "
3804 "thread's stack, since the contents of that stack are undefined after the "
3805 "thread terminates."
3806 msgstr ""
3807
3808 #.  Linux 2.6.27
3809 #.  FIXME . review a later kernel to see if this gets fixed
3810 #.  http://thread.gmane.org/gmane.linux.kernel/611611
3811 #.  http://marc.info/?l=linux-kernel&m=122525468300823&w=2
3812 #. type: Plain text
3813 #: build/C/man3/pthread_exit.3:102
3814 msgid ""
3815 "Currently, there are limitations in the kernel implementation logic for "
3816 "B<wait>(2)ing on a stopped thread group with a dead thread group leader.  "
3817 "This can manifest in problems such as a locked terminal if a stop signal is "
3818 "sent to a foreground process whose thread group leader has already called "
3819 "B<pthread_exit>()."
3820 msgstr ""
3821
3822 #. type: Plain text
3823 #: build/C/man3/pthread_exit.3:106
3824 msgid "B<pthread_create>(3), B<pthread_join>(3), B<pthreads>(7)"
3825 msgstr ""
3826
3827 #. type: TH
3828 #: build/C/man3/pthread_getattr_np.3:24
3829 #, no-wrap
3830 msgid "PTHREAD_GETATTR_NP"
3831 msgstr ""
3832
3833 #. type: Plain text
3834 #: build/C/man3/pthread_getattr_np.3:27
3835 msgid "pthread_getattr_np - get attributes of created thread"
3836 msgstr ""
3837
3838 #. type: Plain text
3839 #: build/C/man3/pthread_getattr_np.3:33
3840 #, no-wrap
3841 msgid ""
3842 "B<int pthread_getattr_np(pthread_t >I<thread>B<, pthread_attr_t "
3843 "*>I<attr>B<);>\n"
3844 msgstr ""
3845
3846 #. type: Plain text
3847 #: build/C/man3/pthread_getattr_np.3:42
3848 msgid ""
3849 "The B<pthread_getattr_np>()  function initializes the thread attributes "
3850 "object referred to by I<attr> so that it contains actual attribute values "
3851 "describing the running thread I<thread>."
3852 msgstr ""
3853
3854 #. type: Plain text
3855 #: build/C/man3/pthread_getattr_np.3:49
3856 msgid ""
3857 "The returned attribute values may differ from the corresponding attribute "
3858 "values passed in the I<attr> object that was used to create the thread using "
3859 "B<pthread_create>(3).  In particular, the following attributes may differ:"
3860 msgstr ""
3861
3862 #. type: Plain text
3863 #: build/C/man3/pthread_getattr_np.3:52
3864 msgid ""
3865 "the detach state, since a joinable thread may have detached itself after "
3866 "creation;"
3867 msgstr ""
3868
3869 #. type: Plain text
3870 #: build/C/man3/pthread_getattr_np.3:55
3871 msgid "the stack size, which the implementation may align to a suitable boundary."
3872 msgstr ""
3873
3874 #. type: Plain text
3875 #: build/C/man3/pthread_getattr_np.3:60
3876 msgid ""
3877 "and the guard size, which the implementation may round upward to a multiple "
3878 "of the page size, or ignore (i.e., treat as 0), if the application is "
3879 "allocating its own stack."
3880 msgstr ""
3881
3882 #. type: Plain text
3883 #: build/C/man3/pthread_getattr_np.3:65
3884 msgid ""
3885 "Furthermore, if the stack address attribute was not set in the thread "
3886 "attributes object used to create the thread, then the returned thread "
3887 "attributes object will report the actual stack address that the "
3888 "implementation selected for the thread."
3889 msgstr ""
3890
3891 #. type: Plain text
3892 #: build/C/man3/pthread_getattr_np.3:70
3893 msgid ""
3894 "When the thread attributes object returned by B<pthread_getattr_np>()  is no "
3895 "longer required, it should be destroyed using B<pthread_attr_destroy>(3)."
3896 msgstr ""
3897
3898 #. type: Plain text
3899 #: build/C/man3/pthread_getattr_np.3:73 build/C/man3/pthread_getcpuclockid.3:46
3900 msgid ""
3901 "On success, this function returns 0; on error, it returns a nonzero error "
3902 "number."
3903 msgstr ""
3904
3905 #.  Can happen (but unlikely) while trying to allocate memory for cpuset
3906 #. type: Plain text
3907 #: build/C/man3/pthread_getattr_np.3:78
3908 msgid "Insufficient memory."
3909 msgstr ""
3910
3911 #. type: Plain text
3912 #: build/C/man3/pthread_getattr_np.3:93
3913 msgid ""
3914 "In addition, if I<thread> refers to the main thread, then "
3915 "B<pthread_getattr_np>()  can fail because of errors from various underlying "
3916 "calls: B<fopen>(3), if I</proc/self/maps> can't be opened; and "
3917 "B<getrlimit>(2), if the B<RLIMIT_STACK> resource limit is not supported."
3918 msgstr ""
3919
3920 #. type: Plain text
3921 #: build/C/man3/pthread_getattr_np.3:95
3922 msgid "This function is available in glibc since version 2.2.3."
3923 msgstr ""
3924
3925 #. type: Plain text
3926 #: build/C/man3/pthread_getattr_np.3:98 build/C/man3/pthread_kill_other_threads_np.3:48
3927 msgid ""
3928 "This function is a nonstandard GNU extension; hence the suffix \"_np\" "
3929 "(nonportable) in the name."
3930 msgstr ""
3931
3932 #. type: Plain text
3933 #: build/C/man3/pthread_getattr_np.3:108
3934 msgid ""
3935 "The program below demonstrates the use of B<pthread_getattr_np>().  The "
3936 "program creates a thread that then uses B<pthread_getattr_np>()  to retrieve "
3937 "and display its guard size, stack address, and stack size attributes.  "
3938 "Command-line arguments can be used to set these attributes to values other "
3939 "than the default when creating the thread.  The shell sessions below "
3940 "demonstrate the use of the program."
3941 msgstr ""
3942
3943 #. type: Plain text
3944 #: build/C/man3/pthread_getattr_np.3:111
3945 msgid ""
3946 "In the first run, on an x86-32 system, a thread is created using default "
3947 "attributes:"
3948 msgstr ""
3949
3950 #. type: Plain text
3951 #: build/C/man3/pthread_getattr_np.3:121
3952 #, no-wrap
3953 msgid ""
3954 "$B< ulimit -s>      # No stack limit ==E<gt> default stack size is 2MB\n"
3955 "unlimited\n"
3956 "$B< ./a.out>\n"
3957 "Attributes of created thread:\n"
3958 "        Guard size          = 4096 bytes\n"
3959 "        Stack address       = 0x40196000 (EOS = 0x40397000)\n"
3960 "        Stack size          = 0x201000 (2101248) bytes\n"
3961 msgstr ""
3962
3963 #. type: Plain text
3964 #: build/C/man3/pthread_getattr_np.3:127
3965 msgid ""
3966 "In the following run, we see that if a guard size is specified, it is "
3967 "rounded up to the next multiple of the system page size (4096 bytes on "
3968 "x86-32):"
3969 msgstr ""
3970
3971 #. type: Plain text
3972 #: build/C/man3/pthread_getattr_np.3:135
3973 #, no-wrap
3974 msgid ""
3975 "$B< ./a.out -g 4097>\n"
3976 "Thread attributes object after initializations:\n"
3977 "        Guard size          = 4097 bytes\n"
3978 "        Stack address       = (nil)\n"
3979 "        Stack size          = 0x0 (0) bytes\n"
3980 msgstr ""
3981
3982 #. type: Plain text
3983 #: build/C/man3/pthread_getattr_np.3:140
3984 #, no-wrap
3985 msgid ""
3986 "Attributes of created thread:\n"
3987 "        Guard size          = 8192 bytes\n"
3988 "        Stack address       = 0x40196000 (EOS = 0x40397000)\n"
3989 "        Stack size          = 0x201000 (2101248) bytes\n"
3990 msgstr ""
3991
3992 #. .in +4n
3993 #. .nf
3994 #. $ ./a.out \-s 0x8000
3995 #. Thread attributes object after initializations:
3996 #.         Guard size          = 4096 bytes
3997 #.         Stack address       = 0xffff8000 (EOS = (nil))
3998 #.         Stack size          = 0x8000 (32768) bytes
3999 #
4000 #. Attributes of created thread:
4001 #.         Guard size          = 4096 bytes
4002 #.         Stack address       = 0x4001e000 (EOS = 0x40026000)
4003 #.         Stack size          = 0x8000 (32768) bytes
4004 #. .fi
4005 #. .in
4006 #. type: Plain text
4007 #: build/C/man3/pthread_getattr_np.3:159
4008 msgid ""
4009 "In the last run, the program manually allocates a stack for the thread.  In "
4010 "this case, the guard size attribute is ignored."
4011 msgstr ""
4012
4013 #. type: Plain text
4014 #: build/C/man3/pthread_getattr_np.3:164
4015 #, no-wrap
4016 msgid ""
4017 "$B< ./a.out -g 4096 -s 0x8000 -a>\n"
4018 "Allocated thread stack at 0x804d000\n"
4019 msgstr ""
4020
4021 #. type: Plain text
4022 #: build/C/man3/pthread_getattr_np.3:169
4023 #, no-wrap
4024 msgid ""
4025 "Thread attributes object after initializations:\n"
4026 "        Guard size          = 4096 bytes\n"
4027 "        Stack address       = 0x804d000 (EOS = 0x8055000)\n"
4028 "        Stack size          = 0x8000 (32768) bytes\n"
4029 msgstr ""
4030
4031 #. type: Plain text
4032 #: build/C/man3/pthread_getattr_np.3:174
4033 #, no-wrap
4034 msgid ""
4035 "Attributes of created thread:\n"
4036 "        Guard size          = 0 bytes\n"
4037 "        Stack address       = 0x804d000 (EOS = 0x8055000)\n"
4038 "        Stack size          = 0x8000 (32768) bytes\n"
4039 msgstr ""
4040
4041 #. type: Plain text
4042 #: build/C/man3/pthread_getattr_np.3:195
4043 #, no-wrap
4044 msgid ""
4045 "static void\n"
4046 "display_stack_related_attributes(pthread_attr_t *attr, char *prefix)\n"
4047 "{\n"
4048 "    int s;\n"
4049 "    size_t stack_size, guard_size;\n"
4050 "    void *stack_addr;\n"
4051 msgstr ""
4052
4053 #. type: Plain text
4054 #: build/C/man3/pthread_getattr_np.3:200
4055 #, no-wrap
4056 msgid ""
4057 "    s = pthread_attr_getguardsize(attr, &guard_size);\n"
4058 "    if (s != 0)\n"
4059 "        handle_error_en(s, \"pthread_attr_getguardsize\");\n"
4060 "    printf(\"%sGuard size          = %d bytes\\en\", prefix, guard_size);\n"
4061 msgstr ""
4062
4063 #. type: Plain text
4064 #: build/C/man3/pthread_getattr_np.3:211
4065 #, no-wrap
4066 msgid ""
4067 "    s = pthread_attr_getstack(attr, &stack_addr, &stack_size);\n"
4068 "    if (s != 0)\n"
4069 "        handle_error_en(s, \"pthread_attr_getstack\");\n"
4070 "    printf(\"%sStack address       = %p\", prefix, stack_addr);\n"
4071 "    if (stack_size E<gt> 0)\n"
4072 "        printf(\" (EOS = %p)\", (char *) stack_addr + stack_size);\n"
4073 "    printf(\"\\en\");\n"
4074 "    printf(\"%sStack size          = 0x%x (%d) bytes\\en\",\n"
4075 "            prefix, stack_size, stack_size);\n"
4076 "}\n"
4077 msgstr ""
4078
4079 #. type: Plain text
4080 #: build/C/man3/pthread_getattr_np.3:217
4081 #, no-wrap
4082 msgid ""
4083 "static void\n"
4084 "display_thread_attributes(pthread_t thread, char *prefix)\n"
4085 "{\n"
4086 "    int s;\n"
4087 "    pthread_attr_t attr;\n"
4088 msgstr ""
4089
4090 #. type: Plain text
4091 #: build/C/man3/pthread_getattr_np.3:221
4092 #, no-wrap
4093 msgid ""
4094 "    s = pthread_getattr_np(thread, &attr);\n"
4095 "    if (s != 0)\n"
4096 "        handle_error_en(s, \"pthread_getattr_np\");\n"
4097 msgstr ""
4098
4099 #. type: Plain text
4100 #: build/C/man3/pthread_getattr_np.3:223
4101 #, no-wrap
4102 msgid "    display_stack_related_attributes(&attr, prefix);\n"
4103 msgstr ""
4104
4105 #. type: Plain text
4106 #: build/C/man3/pthread_getattr_np.3:228
4107 #, no-wrap
4108 msgid ""
4109 "    s = pthread_attr_destroy(&attr);\n"
4110 "    if (s != 0)\n"
4111 "        handle_error_en(s, \"pthread_attr_destroy\");\n"
4112 "}\n"
4113 msgstr ""
4114
4115 #. type: Plain text
4116 #: build/C/man3/pthread_getattr_np.3:234
4117 #, no-wrap
4118 msgid ""
4119 "static void *           /* Start function for thread we create */\n"
4120 "thread_start(void *arg)\n"
4121 "{\n"
4122 "    printf(\"Attributes of created thread:\\en\");\n"
4123 "    display_thread_attributes(pthread_self(), \"\\et\");\n"
4124 msgstr ""
4125
4126 #. type: Plain text
4127 #: build/C/man3/pthread_getattr_np.3:248
4128 #, no-wrap
4129 msgid ""
4130 "static void\n"
4131 "usage(char *pname, char *msg)\n"
4132 "{\n"
4133 "    if (msg != NULL)\n"
4134 "        fputs(msg, stderr);\n"
4135 "    fprintf(stderr, \"Usage: %s [-s stack-size [-a]]\"\n"
4136 "            \" [-g guard-size]\\en\", pname);\n"
4137 "    fprintf(stderr, \"\\et\\et-a means program should allocate "
4138 "stack\\en\");\n"
4139 "    exit(EXIT_FAILURE);\n"
4140 "}\n"
4141 msgstr ""
4142
4143 #. type: Plain text
4144 #: build/C/man3/pthread_getattr_np.3:261
4145 #, no-wrap
4146 msgid ""
4147 "static pthread_attr_t *   /* Get thread attributes from command line */\n"
4148 "get_thread_attributes_from_cl(int argc, char *argv[],\n"
4149 "                              pthread_attr_t *attrp)\n"
4150 "{\n"
4151 "    int s, opt, allocate_stack;\n"
4152 "    long stack_size, guard_size;\n"
4153 "            void *stack_addr;\n"
4154 "    pthread_attr_t *ret_attrp = NULL;   /* Set to attrp if we initialize\n"
4155 "                                           a thread attributes object */\n"
4156 "    allocate_stack = 0;\n"
4157 "    stack_size = -1;\n"
4158 "    guard_size = -1;\n"
4159 msgstr ""
4160
4161 #. type: Plain text
4162 #: build/C/man3/pthread_getattr_np.3:270
4163 #, no-wrap
4164 msgid ""
4165 "    while ((opt = getopt(argc, argv, \"ag:s:\")) != -1) {\n"
4166 "        switch (opt) {\n"
4167 "        case \\(aqa\\(aq:   allocate_stack = 1;                     break;\n"
4168 "        case \\(aqg\\(aq:   guard_size = strtoul(optarg, NULL, 0);  break;\n"
4169 "        case \\(aqs\\(aq:   stack_size = strtoul(optarg, NULL, 0);  break;\n"
4170 "        default:    usage(argv[0], NULL);\n"
4171 "        }\n"
4172 "    }\n"
4173 msgstr ""
4174
4175 #. type: Plain text
4176 #: build/C/man3/pthread_getattr_np.3:273
4177 #, no-wrap
4178 msgid ""
4179 "    if (allocate_stack && stack_size == -1)\n"
4180 "        usage(argv[0], \"Specifying -a without -s makes no sense\\en\");\n"
4181 msgstr ""
4182
4183 #. type: Plain text
4184 #: build/C/man3/pthread_getattr_np.3:276
4185 #, no-wrap
4186 msgid ""
4187 "    if (argc E<gt> optind)\n"
4188 "        usage(argv[0], \"Extraneous command-line arguments\\en\");\n"
4189 msgstr ""
4190
4191 #. type: Plain text
4192 #: build/C/man3/pthread_getattr_np.3:279
4193 #, no-wrap
4194 msgid ""
4195 "    if (stack_size E<gt>= 0 || guard_size E<gt> 0) {\n"
4196 "        ret_attrp = attrp;\n"
4197 msgstr ""
4198
4199 #. type: Plain text
4200 #: build/C/man3/pthread_getattr_np.3:284
4201 #, no-wrap
4202 msgid ""
4203 "        s = pthread_attr_init(attrp);\n"
4204 "        if (s != 0)\n"
4205 "            handle_error_en(s, \"pthread_attr_init\");\n"
4206 "    }\n"
4207 msgstr ""
4208
4209 #. type: Plain text
4210 #: build/C/man3/pthread_getattr_np.3:296
4211 #, no-wrap
4212 msgid ""
4213 "    if (stack_size E<gt>= 0) {\n"
4214 "        if (!allocate_stack) {\n"
4215 "            s = pthread_attr_setstacksize(attrp, stack_size);\n"
4216 "            if (s != 0)\n"
4217 "                handle_error_en(s, \"pthread_attr_setstacksize\");\n"
4218 "        } else {\n"
4219 "            s = posix_memalign(&stack_addr, sysconf(_SC_PAGESIZE),\n"
4220 "                               stack_size);\n"
4221 "            if (s != 0)\n"
4222 "                handle_error_en(s, \"posix_memalign\");\n"
4223 "            printf(\"Allocated thread stack at %p\\en\\en\", stack_addr);\n"
4224 msgstr ""
4225
4226 #. type: Plain text
4227 #: build/C/man3/pthread_getattr_np.3:302
4228 #, no-wrap
4229 msgid ""
4230 "            s = pthread_attr_setstack(attrp, stack_addr, stack_size);\n"
4231 "            if (s != 0)\n"
4232 "                handle_error_en(s, \"pthread_attr_setstacksize\");\n"
4233 "        }\n"
4234 "    }\n"
4235 msgstr ""
4236
4237 #. type: Plain text
4238 #: build/C/man3/pthread_getattr_np.3:308
4239 #, no-wrap
4240 msgid ""
4241 "    if (guard_size E<gt>= 0) {\n"
4242 "        s = pthread_attr_setguardsize(attrp, guard_size);\n"
4243 "        if (s != 0)\n"
4244 "            handle_error_en(s, \"pthread_attr_setstacksize\");\n"
4245 "    }\n"
4246 msgstr ""
4247
4248 #. type: Plain text
4249 #: build/C/man3/pthread_getattr_np.3:311
4250 #, no-wrap
4251 msgid ""
4252 "    return ret_attrp;\n"
4253 "}\n"
4254 msgstr ""
4255
4256 #. type: Plain text
4257 #: build/C/man3/pthread_getattr_np.3:320
4258 #, no-wrap
4259 msgid ""
4260 "int\n"
4261 "main(int argc, char *argv[])\n"
4262 "{\n"
4263 "    int s;\n"
4264 "    pthread_t thr;\n"
4265 "    pthread_attr_t attr;\n"
4266 "    pthread_attr_t *attrp = NULL;    /* Set to &attr if we initialize\n"
4267 "                                        a thread attributes object */\n"
4268 msgstr ""
4269
4270 #. type: Plain text
4271 #: build/C/man3/pthread_getattr_np.3:322
4272 #, no-wrap
4273 msgid "    attrp = get_thread_attributes_from_cl(argc, argv, &attr);\n"
4274 msgstr ""
4275
4276 #. type: Plain text
4277 #: build/C/man3/pthread_getattr_np.3:328
4278 #, no-wrap
4279 msgid ""
4280 "    if (attrp != NULL) {\n"
4281 "        printf(\"Thread attributes object after initializations:\\en\");\n"
4282 "        display_stack_related_attributes(attrp, \"\\et\");\n"
4283 "        printf(\"\\en\");\n"
4284 "    }\n"
4285 msgstr ""
4286
4287 #. type: Plain text
4288 #: build/C/man3/pthread_getattr_np.3:356
4289 msgid ""
4290 "B<pthread_attr_getaffinity_np>(3), B<pthread_attr_getdetachstate>(3), "
4291 "B<pthread_attr_getguardsize>(3), B<pthread_attr_getinheritsched>(3), "
4292 "B<pthread_attr_getschedparam>(3), B<pthread_attr_getschedpolicy>(3), "
4293 "B<pthread_attr_getscope>(3), B<pthread_attr_getstack>(3), "
4294 "B<pthread_attr_getstackaddr>(3), B<pthread_attr_getstacksize>(3), "
4295 "B<pthread_attr_init>(3), B<pthread_create>(3), B<pthreads>(7)"
4296 msgstr ""
4297
4298 #. type: TH
4299 #: build/C/man3/pthread_getcpuclockid.3:24
4300 #, no-wrap
4301 msgid "PTHREAD_GETCPUCLOCKID"
4302 msgstr ""
4303
4304 #. type: TH
4305 #: build/C/man3/pthread_getcpuclockid.3:24
4306 #, no-wrap
4307 msgid "2009-02-08"
4308 msgstr ""
4309
4310 #. type: Plain text
4311 #: build/C/man3/pthread_getcpuclockid.3:27
4312 msgid "pthread_getcpuclockid - retrieve ID of a thread's CPU time clock"
4313 msgstr ""
4314
4315 #. type: Plain text
4316 #: build/C/man3/pthread_getcpuclockid.3:31
4317 #, no-wrap
4318 msgid ""
4319 "B<#include E<lt>pthread.hE<gt>>\n"
4320 "B<#include E<lt>time.hE<gt>>\n"
4321 msgstr ""
4322
4323 #. type: Plain text
4324 #: build/C/man3/pthread_getcpuclockid.3:33
4325 #, no-wrap
4326 msgid ""
4327 "B<int pthread_getcpuclockid(pthread_t >I<thread>B<, clockid_t "
4328 "*>I<clock_id);>\n"
4329 msgstr ""
4330
4331 #.  The clockid is constructed as follows:
4332 #.  *clockid = CLOCK_THREAD_CPUTIME_ID | (pd->tid << CLOCK_IDFIELD_SIZE)
4333 #.  where CLOCK_IDFIELD_SIZE is 3.
4334 #. type: Plain text
4335 #: build/C/man3/pthread_getcpuclockid.3:43
4336 msgid ""
4337 "The B<pthread_getcpuclockid>()  function returns the clock ID for the CPU "
4338 "time clock of the thread I<thread>."
4339 msgstr ""
4340
4341 #. type: TP
4342 #: build/C/man3/pthread_getcpuclockid.3:47
4343 #, no-wrap
4344 msgid "B<ENOENT>"
4345 msgstr ""
4346
4347 #.  CLOCK_THREAD_CPUTIME_ID not defined
4348 #
4349 #.  Looking at nptl/pthread_getcpuclockid.c an ERANGE error would
4350 #.  be possible if kernel thread IDs took more than 29 bits (which
4351 #.  they currently cannot).
4352 #. type: Plain text
4353 #: build/C/man3/pthread_getcpuclockid.3:55
4354 msgid "Per-thread CPU time clocks are not supported by the system."
4355 msgstr ""
4356
4357 #. type: Plain text
4358 #: build/C/man3/pthread_getcpuclockid.3:62
4359 msgid "This function is available in glibc since version 2.2."
4360 msgstr ""
4361
4362 #. type: Plain text
4363 #: build/C/man3/pthread_getcpuclockid.3:75
4364 msgid ""
4365 "When I<thread> refers to the calling thread, this function returns an "
4366 "identifier that refers to the same clock manipulated by B<clock_gettime>(2)  "
4367 "and B<clock_settime>(2)  when given the clock ID B<CLOCK_THREAD_CPUTIME_ID>."
4368 msgstr ""
4369
4370 #. type: Plain text
4371 #: build/C/man3/pthread_getcpuclockid.3:81
4372 msgid ""
4373 "The program below creates a thread and then uses B<clock_gettime>(2)  to "
4374 "retrieve the total process CPU time, and the per-thread CPU time consumed by "
4375 "the two threads.  The following shell session shows an example run:"
4376 msgstr ""
4377
4378 #. type: Plain text
4379 #: build/C/man3/pthread_getcpuclockid.3:90
4380 #, no-wrap
4381 msgid ""
4382 "$ B<./a.out>\n"
4383 "Main thread sleeping\n"
4384 "Subthread starting infinite loop\n"
4385 "Main thread consuming some CPU time...\n"
4386 "Process total CPU time:    1.368\n"
4387 "Main thread CPU time:      0.376\n"
4388 "Subthread CPU time:        0.992\n"
4389 msgstr ""
4390
4391 #. type: Plain text
4392 #: build/C/man3/pthread_getcpuclockid.3:96
4393 #, no-wrap
4394 msgid "/* Link with \"-lrt\" */\n"
4395 msgstr ""
4396
4397 #. type: Plain text
4398 #: build/C/man3/pthread_getcpuclockid.3:104
4399 #, no-wrap
4400 msgid ""
4401 "#include E<lt>time.hE<gt>\n"
4402 "#include E<lt>stdio.hE<gt>\n"
4403 "#include E<lt>stdlib.hE<gt>\n"
4404 "#include E<lt>unistd.hE<gt>\n"
4405 "#include E<lt>pthread.hE<gt>\n"
4406 "#include E<lt>string.hE<gt>\n"
4407 "#include E<lt>errno.hE<gt>\n"
4408 msgstr ""
4409
4410 #. type: Plain text
4411 #: build/C/man3/pthread_getcpuclockid.3:118
4412 #, no-wrap
4413 msgid ""
4414 "static void *\n"
4415 "thread_start(void *arg)\n"
4416 "{\n"
4417 "    printf(\"Subthread starting infinite loop\\en\");\n"
4418 "    for (;;)\n"
4419 "        continue;\n"
4420 "}\n"
4421 msgstr ""
4422
4423 #. type: Plain text
4424 #: build/C/man3/pthread_getcpuclockid.3:123
4425 #, no-wrap
4426 msgid ""
4427 "static void\n"
4428 "pclock(char *msg, clockid_t cid)\n"
4429 "{\n"
4430 "    struct timespec ts;\n"
4431 msgstr ""
4432
4433 #. type: Plain text
4434 #: build/C/man3/pthread_getcpuclockid.3:129
4435 #, no-wrap
4436 msgid ""
4437 "    printf(\"%s\", msg);\n"
4438 "    if (clock_gettime(cid, &ts) == -1)\n"
4439 "        handle_error(\"clock_gettime\");\n"
4440 "    printf(\"%4ld.%03ld\\en\", ts.tv_sec, ts.tv_nsec / 1000000);\n"
4441 "}\n"
4442 msgstr ""
4443
4444 #. type: Plain text
4445 #: build/C/man3/pthread_getcpuclockid.3:136
4446 #, no-wrap
4447 msgid ""
4448 "int\n"
4449 "main(int argc, char *argv[])\n"
4450 "{\n"
4451 "    pthread_t thread;\n"
4452 "    clockid_t cid;\n"
4453 "    int j, s;\n"
4454 msgstr ""
4455
4456 #. type: Plain text
4457 #: build/C/man3/pthread_getcpuclockid.3:140
4458 #, no-wrap
4459 msgid ""
4460 "    s = pthread_create(&thread, NULL, thread_start, NULL);\n"
4461 "    if (s != 0)\n"
4462 "        handle_error_en(s, \"pthread_create\");\n"
4463 msgstr ""
4464
4465 #. type: Plain text
4466 #: build/C/man3/pthread_getcpuclockid.3:143
4467 #, no-wrap
4468 msgid ""
4469 "    printf(\"Main thread sleeping\\en\");\n"
4470 "    sleep(1);\n"
4471 msgstr ""
4472
4473 #. type: Plain text
4474 #: build/C/man3/pthread_getcpuclockid.3:147
4475 #, no-wrap
4476 msgid ""
4477 "    printf(\"Main thread consuming some CPU time...\\en\");\n"
4478 "    for (j = 0; j E<lt> 2000000; j++)\n"
4479 "        getppid();\n"
4480 msgstr ""
4481
4482 #. type: Plain text
4483 #: build/C/man3/pthread_getcpuclockid.3:149
4484 #, no-wrap
4485 msgid "    pclock(\"Process total CPU time: \", CLOCK_PROCESS_CPUTIME_ID);\n"
4486 msgstr ""
4487
4488 #. type: Plain text
4489 #: build/C/man3/pthread_getcpuclockid.3:154
4490 #, no-wrap
4491 msgid ""
4492 "    s = pthread_getcpuclockid(pthread_self(), &cid);\n"
4493 "    if (s != 0)\n"
4494 "        handle_error_en(s, \"pthread_getcpuclockid\");\n"
4495 "    pclock(\"Main thread CPU time:   \", cid);\n"
4496 msgstr ""
4497
4498 #. type: Plain text
4499 #: build/C/man3/pthread_getcpuclockid.3:157
4500 #, no-wrap
4501 msgid ""
4502 "    /* The preceding 4 lines of code could have been replaced by:\n"
4503 "       pclock(\"Main thread CPU time:   \", CLOCK_THREAD_CPUTIME_ID); */\n"
4504 msgstr ""
4505
4506 #. type: Plain text
4507 #: build/C/man3/pthread_getcpuclockid.3:162
4508 #, no-wrap
4509 msgid ""
4510 "    s = pthread_getcpuclockid(thread, &cid);\n"
4511 "    if (s != 0)\n"
4512 "        handle_error_en(s, \"pthread_getcpuclockid\");\n"
4513 "    pclock(\"Subthread CPU time: 1    \", cid);\n"
4514 msgstr ""
4515
4516 #. type: Plain text
4517 #: build/C/man3/pthread_getcpuclockid.3:165
4518 #, no-wrap
4519 msgid ""
4520 "    exit(EXIT_SUCCESS);         /* Terminates both threads */\n"
4521 "}\n"
4522 msgstr ""
4523
4524 #. type: Plain text
4525 #: build/C/man3/pthread_getcpuclockid.3:174
4526 msgid ""
4527 "B<clock_gettime>(2), B<clock_settime>(2), B<timer_create>(2), "
4528 "B<clock_getcpuclockid>(3), B<pthread_self>(3), B<pthreads>(7), B<time>(7)"
4529 msgstr ""
4530
4531 #. type: TH
4532 #: build/C/man3/pthread_join.3:24
4533 #, no-wrap
4534 msgid "PTHREAD_JOIN"
4535 msgstr ""
4536
4537 #. type: Plain text
4538 #: build/C/man3/pthread_join.3:27
4539 msgid "pthread_join - join with a terminated thread"
4540 msgstr ""
4541
4542 #. type: Plain text
4543 #: build/C/man3/pthread_join.3:32
4544 #, no-wrap
4545 msgid "B<int pthread_join(pthread_t >I<thread>B<, void **>I<retval>B<);>\n"
4546 msgstr ""
4547
4548 #. type: Plain text
4549 #: build/C/man3/pthread_join.3:47
4550 msgid ""
4551 "The B<pthread_join>()  function waits for the thread specified by I<thread> "
4552 "to terminate.  If that thread has already terminated, then B<pthread_join>()  "
4553 "returns immediately.  The thread specified by I<thread> must be joinable."
4554 msgstr ""
4555
4556 #. type: Plain text
4557 #: build/C/man3/pthread_join.3:61
4558 msgid ""
4559 "If I<retval> is not NULL, then B<pthread_join>()  copies the exit status of "
4560 "the target thread (i.e., the value that the target thread supplied to "
4561 "B<pthread_exit>(3))  into the location pointed to by I<*retval>.  If the "
4562 "target thread was canceled, then B<PTHREAD_CANCELED> is placed in "
4563 "I<*retval>."
4564 msgstr ""
4565
4566 #. type: Plain text
4567 #: build/C/man3/pthread_join.3:68
4568 msgid ""
4569 "If multiple threads simultaneously try to join with the same thread, the "
4570 "results are undefined.  If the thread calling B<pthread_join>()  is "
4571 "canceled, then the target thread will remain joinable (i.e., it will not be "
4572 "detached)."
4573 msgstr ""
4574
4575 #. type: Plain text
4576 #: build/C/man3/pthread_join.3:73
4577 msgid ""
4578 "On success, B<pthread_join>()  returns 0; on error, it returns an error "
4579 "number."
4580 msgstr ""
4581
4582 #. type: TP
4583 #: build/C/man3/pthread_join.3:74
4584 #, no-wrap
4585 msgid "B<EDEADLK>"
4586 msgstr ""
4587
4588 #.  The following verified by testing on glibc 2.8/NPTL:
4589 #.  The following verified by testing on glibc 2.8/NPTL:
4590 #. type: Plain text
4591 #: build/C/man3/pthread_join.3:83
4592 msgid ""
4593 "A deadlock was detected (e.g., two threads tried to join with each other); "
4594 "or I<thread> specifies the calling thread."
4595 msgstr ""
4596
4597 #.  POSIX.1-2001 does not specify this error case.
4598 #. type: Plain text
4599 #: build/C/man3/pthread_join.3:91
4600 msgid "Another thread is already waiting to join with this thread."
4601 msgstr ""
4602
4603 #. type: Plain text
4604 #: build/C/man3/pthread_join.3:102
4605 msgid ""
4606 "After a successful call to B<pthread_join>(), the caller is guaranteed that "
4607 "the target thread has terminated."
4608 msgstr ""
4609
4610 #. type: Plain text
4611 #: build/C/man3/pthread_join.3:105
4612 msgid ""
4613 "Joining with a thread that has previously been joined results in undefined "
4614 "behavior."
4615 msgstr ""
4616
4617 #. type: Plain text
4618 #: build/C/man3/pthread_join.3:113
4619 msgid ""
4620 "Failure to join with a thread that is joinable (i.e., one that is not "
4621 "detached), produces a \"zombie thread\".  Avoid doing this, since each "
4622 "zombie thread consumes some system resources, and when enough zombie threads "
4623 "have accumulated, it will no longer be possible to create new threads (or "
4624 "processes)."
4625 msgstr ""
4626
4627 #. type: Plain text
4628 #: build/C/man3/pthread_join.3:119
4629 msgid ""
4630 "There is no pthreads analog of I<waitpid(-1,\\ &status,\\ 0)>, that is, "
4631 "\"join with any terminated thread\".  If you believe you need this "
4632 "functionality, you probably need to rethink your application design."
4633 msgstr ""
4634
4635 #. type: Plain text
4636 #: build/C/man3/pthread_join.3:122
4637 msgid ""
4638 "All of the threads in a process are peers: any thread can join with any "
4639 "other thread in the process."
4640 msgstr ""
4641
4642 #. type: Plain text
4643 #: build/C/man3/pthread_join.3:132
4644 msgid ""
4645 "B<pthread_cancel>(3), B<pthread_create>(3), B<pthread_detach>(3), "
4646 "B<pthread_exit>(3), B<pthread_tryjoin_np>(3), B<pthreads>(7)"
4647 msgstr ""
4648
4649 #. type: TH
4650 #: build/C/man3/pthread_kill.3:24
4651 #, no-wrap
4652 msgid "PTHREAD_KILL"
4653 msgstr ""
4654
4655 #. type: TH
4656 #: build/C/man3/pthread_kill.3:24
4657 #, no-wrap
4658 msgid "2009-01-28"
4659 msgstr ""
4660
4661 #. type: Plain text
4662 #: build/C/man3/pthread_kill.3:27
4663 msgid "pthread_kill - send a signal to a thread"
4664 msgstr ""
4665
4666 #. type: Plain text
4667 #: build/C/man3/pthread_kill.3:30 build/C/man3/pthread_sigmask.3:30
4668 #, no-wrap
4669 msgid "B<#include E<lt>signal.hE<gt>>\n"
4670 msgstr ""
4671
4672 #. type: Plain text
4673 #: build/C/man3/pthread_kill.3:32
4674 #, no-wrap
4675 msgid "B<int pthread_kill(pthread_t >I<thread>B<, int >I<sig>B<);>\n"
4676 msgstr ""
4677
4678 #. type: Plain text
4679 #: build/C/man3/pthread_kill.3:45
4680 msgid ""
4681 "The B<pthread_kill>()  function sends the signal I<sig> to I<thread>, "
4682 "another thread in the same process as the caller.  The signal is "
4683 "asynchronously directed to I<thread>."
4684 msgstr ""
4685
4686 #. type: Plain text
4687 #: build/C/man3/pthread_kill.3:50
4688 msgid ""
4689 "If I<sig> is 0, then no signal is sent, but error checking is still "
4690 "performed; this can be used to check for the existence of a thread ID."
4691 msgstr ""
4692
4693 #. type: Plain text
4694 #: build/C/man3/pthread_kill.3:55
4695 msgid ""
4696 "On success, B<pthread_kill>()  returns 0; on error, it returns an error "
4697 "number, and no signal is sent."
4698 msgstr ""
4699
4700 #. type: Plain text
4701 #: build/C/man3/pthread_kill.3:59
4702 msgid "An invalid signal was specified."
4703 msgstr ""
4704
4705 #. type: Plain text
4706 #: build/C/man3/pthread_kill.3:73
4707 msgid ""
4708 "Signal dispositions are process-wide: if a signal handler is installed, the "
4709 "handler will be invoked in the thread I<thread>, but if the disposition of "
4710 "the signal is \"stop\", \"continue\", or \"terminate\", this action will "
4711 "affect the whole process."
4712 msgstr ""
4713
4714 #. type: Plain text
4715 #: build/C/man3/pthread_kill.3:82
4716 msgid ""
4717 "B<kill>(2)  B<sigaction>(2), B<sigpending>(2), B<pthread_self>(3), "
4718 "B<pthread_sigmask>(3), B<raise>(3), B<pthreads>(7), B<signal>(7)"
4719 msgstr ""
4720
4721 #. type: TH
4722 #: build/C/man3/pthread_kill_other_threads_np.3:24
4723 #, no-wrap
4724 msgid "PTHREAD_KILL_OTHER_THREADS_NP"
4725 msgstr ""
4726
4727 #. type: TH
4728 #: build/C/man3/pthread_kill_other_threads_np.3:24
4729 #, no-wrap
4730 msgid "2010-09-09"
4731 msgstr ""
4732
4733 #. type: Plain text
4734 #: build/C/man3/pthread_kill_other_threads_np.3:27
4735 msgid "pthread_kill_other_threads_np - terminate all other threads in process"
4736 msgstr ""
4737
4738 #. type: Plain text
4739 #: build/C/man3/pthread_kill_other_threads_np.3:32
4740 #, no-wrap
4741 msgid "B<void pthread_kill_other_threads_np(void);>\n"
4742 msgstr ""
4743
4744 #.  .SH VERSIONS
4745 #.  Available since glibc 2.0
4746 #. type: Plain text
4747 #: build/C/man3/pthread_kill_other_threads_np.3:45
4748 msgid ""
4749 "B<pthread_kill_other_threads_np>()  only has an effect in the LinuxThreads "
4750 "threading implementation.  On that implementation, calling this function "
4751 "causes the immediate termination of all threads in the application, except "
4752 "the calling thread.  The cancellation state and cancellation type of the "
4753 "to-be-terminated threads are ignored, and the cleanup handlers are not "
4754 "called in those threads."
4755 msgstr ""
4756
4757 #. type: Plain text
4758 #: build/C/man3/pthread_kill_other_threads_np.3:57
4759 msgid ""
4760 "B<pthread_kill_other_threads_np>()  is intended to be called just before a "
4761 "thread calls B<execve>(2)  or a similar function.  This function is designed "
4762 "to address a limitation in the obsolete LinuxThreads implementation whereby "
4763 "the other threads of an application are not automatically terminated (as "
4764 "POSIX.1-2001 requires) during B<execve>(2)."
4765 msgstr ""
4766
4767 #. type: Plain text
4768 #: build/C/man3/pthread_kill_other_threads_np.3:64
4769 msgid ""
4770 "In the NPTL threading implementation, B<pthread_kill_other_threads_np>()  "
4771 "exists, but does nothing.  (Nothing needs to be done, because the "
4772 "implementation does the right thing during an B<execve>(2).)"
4773 msgstr ""
4774
4775 #. type: Plain text
4776 #: build/C/man3/pthread_kill_other_threads_np.3:70
4777 msgid ""
4778 "B<execve>(2), B<pthread_cancel>(3), B<pthread_setcancelstate>(3), "
4779 "B<pthread_setcanceltype>(3), B<pthreads>(7)"
4780 msgstr ""
4781
4782 #. type: TH
4783 #: build/C/man3/pthread_self.3:24
4784 #, no-wrap
4785 msgid "PTHREAD_SELF"
4786 msgstr ""
4787
4788 #. type: Plain text
4789 #: build/C/man3/pthread_self.3:27
4790 msgid "pthread_self - obtain ID of the calling thread"
4791 msgstr ""
4792
4793 #. type: Plain text
4794 #: build/C/man3/pthread_self.3:32
4795 #, no-wrap
4796 msgid "B<pthread_t pthread_self(void);>\n"
4797 msgstr ""
4798
4799 #. type: Plain text
4800 #: build/C/man3/pthread_self.3:43
4801 msgid ""
4802 "The B<pthread_self>()  function returns the ID of the calling thread.  This "
4803 "is the same value that is returned in I<*thread> in the B<pthread_create>(3)  "
4804 "call that created this thread."
4805 msgstr ""
4806
4807 #. type: Plain text
4808 #: build/C/man3/pthread_self.3:45
4809 msgid "This function always succeeds, returning the calling thread's ID."
4810 msgstr ""
4811
4812 #. type: Plain text
4813 #: build/C/man3/pthread_self.3:60
4814 msgid ""
4815 "POSIX.1 allows an implementation wide freedom in choosing the type used to "
4816 "represent a thread ID; for example, representation using either an "
4817 "arithmetic type or a structure is permitted.  Therefore, variables of type "
4818 "I<pthread_t> can't portably be compared using the C equality operator "
4819 "(B<==>); use B<pthread_equal>(3)  instead."
4820 msgstr ""
4821
4822 #. type: Plain text
4823 #: build/C/man3/pthread_self.3:64
4824 msgid ""
4825 "Thread identifiers should be considered opaque: any attempt to use a thread "
4826 "ID other than in pthreads calls is nonportable and can lead to unspecified "
4827 "results."
4828 msgstr ""
4829
4830 #. type: Plain text
4831 #: build/C/man3/pthread_self.3:68
4832 msgid ""
4833 "Thread IDs are only guaranteed to be unique within a process.  A thread ID "
4834 "may be reused after a terminated thread has been joined, or a detached "
4835 "thread has terminated."
4836 msgstr ""
4837
4838 #. type: Plain text
4839 #: build/C/man3/pthread_self.3:73
4840 msgid ""
4841 "The thread ID returned by B<pthread_self>()  is not the same thing as the "
4842 "kernel thread ID returned by a call to B<gettid>(2)."
4843 msgstr ""
4844
4845 #. type: Plain text
4846 #: build/C/man3/pthread_self.3:77
4847 msgid "B<pthread_create>(3), B<pthread_equal>(3), B<pthreads>(7)"
4848 msgstr ""
4849
4850 #. type: TH
4851 #: build/C/man3/pthread_setaffinity_np.3:24
4852 #, no-wrap
4853 msgid "PTHREAD_SETAFFINITY_NP"
4854 msgstr ""
4855
4856 #. type: Plain text
4857 #: build/C/man3/pthread_setaffinity_np.3:28
4858 msgid ""
4859 "pthread_setaffinity_np, pthread_getaffinity_np - set/get CPU affinity of a "
4860 "thread"
4861 msgstr ""
4862
4863 #. type: Plain text
4864 #: build/C/man3/pthread_setaffinity_np.3:37
4865 #, no-wrap
4866 msgid ""
4867 "B<int pthread_setaffinity_np(pthread_t >I<thread>B<, size_t "
4868 ">I<cpusetsize>B<,>\n"
4869 "B<                           const cpu_set_t *>I<cpuset>B<);>\n"
4870 "B<int pthread_getaffinity_np(pthread_t >I<thread>B<, size_t "
4871 ">I<cpusetsize>B<,>\n"
4872 "B<                           cpu_set_t *>I<cpuset>B<);>\n"
4873 msgstr ""
4874
4875 #. type: Plain text
4876 #: build/C/man3/pthread_setaffinity_np.3:51
4877 msgid ""
4878 "The B<pthread_setaffinity_np>()  function sets the CPU affinity mask of the "
4879 "thread I<thread> to the CPU set pointed to by I<cpuset>.  If the call is "
4880 "successful, and the thread is not currently running on one of the CPUs in "
4881 "I<cpuset>, then it is migrated to one of those CPUs."
4882 msgstr ""
4883
4884 #. type: Plain text
4885 #: build/C/man3/pthread_setaffinity_np.3:58
4886 msgid ""
4887 "The B<pthread_getaffinity_np>()  function returns the CPU affinity mask of "
4888 "the thread I<thread> in the buffer pointed to by I<cpuset>."
4889 msgstr ""
4890
4891 #. type: Plain text
4892 #: build/C/man3/pthread_setaffinity_np.3:74
4893 msgid ""
4894 "The argument I<cpusetsize> is the length (in bytes) of the buffer pointed to "
4895 "by I<cpuset>.  Typically, this argument would be specified as "
4896 "I<sizeof(cpu_set_t)>.  (It may be some other value, if using the macros "
4897 "described in B<CPU_SET>(3)  for dynamically allocating a CPU set.)"
4898 msgstr ""
4899
4900 #. type: TP
4901 #: build/C/man3/pthread_setaffinity_np.3:78
4902 #, no-wrap
4903 msgid "B<EFAULT>"
4904 msgstr ""
4905
4906 #. type: Plain text
4907 #: build/C/man3/pthread_setaffinity_np.3:81
4908 msgid "A supplied memory address was invalid."
4909 msgstr ""
4910
4911 #. type: Plain text
4912 #: build/C/man3/pthread_setaffinity_np.3:90
4913 msgid ""
4914 "(B<pthread_setaffinity_np>())  The affinity bit mask I<mask> contains no "
4915 "processors that are currently physically on the system and permitted to the "
4916 "thread according to any restrictions that may be imposed by the \"cpuset\" "
4917 "mechanism described in B<cpuset>(7)."
4918 msgstr ""
4919
4920 #.  FIXME . ?
4921 #.  Loic Domaigne commented: it seems that in the future the
4922 #.  kernel developers want to make cpumask_t dynamic, so
4923 #.  CONFIG_NR_CPUS might become obsolete in the future.
4924 #.  cpumask_t
4925 #.  The raw sched_getaffinity() system call returns the size (in bytes)
4926 #.  of the cpumask_t type.
4927 #. type: Plain text
4928 #: build/C/man3/pthread_setaffinity_np.3:106
4929 msgid ""
4930 "(B<pthread_setaffinity_np>())  I<cpuset> specified a CPU that was outside "
4931 "the set supported by the kernel.  (The kernel configuration option "
4932 "B<CONFIG_NR_CPUS> defines the range of the set supported by the kernel data "
4933 "type used to represent CPU sets.)"
4934 msgstr ""
4935
4936 #. type: Plain text
4937 #: build/C/man3/pthread_setaffinity_np.3:111
4938 msgid ""
4939 "(B<pthread_getaffinity_np>())  I<cpusetsize> is smaller than the size of the "
4940 "affinity mask used by the kernel."
4941 msgstr ""
4942
4943 #. type: Plain text
4944 #: build/C/man3/pthread_setaffinity_np.3:134
4945 msgid ""
4946 "After a call to B<pthread_setaffinity_np>(), the set of CPUs on which the "
4947 "thread will actually run is the intersection of the set specified in the "
4948 "I<cpuset> argument and the set of CPUs actually present on the system.  The "
4949 "system may further restrict the set of CPUs on which the thread runs if the "
4950 "\"cpuset\" mechanism described in B<cpuset>(7)  is being used.  These "
4951 "restrictions on the actual set of CPUs on which the thread will run are "
4952 "silently imposed by the kernel."
4953 msgstr ""
4954
4955 #. type: Plain text
4956 #: build/C/man3/pthread_setaffinity_np.3:140
4957 msgid ""
4958 "These functions are implemented on top of the B<sched_setaffinity>(2)  and "
4959 "B<sched_getaffinity>(2)  system calls."
4960 msgstr ""
4961
4962 #. type: Plain text
4963 #: build/C/man3/pthread_setaffinity_np.3:151
4964 msgid ""
4965 "A new thread created by B<pthread_create>(3)  inherits a copy of its "
4966 "creator's CPU affinity mask."
4967 msgstr ""
4968
4969 #. type: Plain text
4970 #: build/C/man3/pthread_setaffinity_np.3:159
4971 msgid ""
4972 "In the following program, the main thread uses B<pthread_setaffinity_np>()  "
4973 "to set its CPU affinity mask to include CPUs 0 to 7 (which may not all be "
4974 "available on the system), and then calls B<pthread_getaffinity_np>()  to "
4975 "check the resulting CPU affinity mask of the thread."
4976 msgstr ""
4977
4978 #. type: Plain text
4979 #: build/C/man3/pthread_setaffinity_np.3:166
4980 #, no-wrap
4981 msgid ""
4982 "#define _GNU_SOURCE\n"
4983 "#include E<lt>pthread.hE<gt>\n"
4984 "#include E<lt>stdio.hE<gt>\n"
4985 "#include E<lt>stdlib.hE<gt>\n"
4986 "#include E<lt>errno.hE<gt>\n"
4987 msgstr ""
4988
4989 #. type: Plain text
4990 #: build/C/man3/pthread_setaffinity_np.3:176
4991 #, no-wrap
4992 msgid ""
4993 "int\n"
4994 "main(int argc, char *argv[])\n"
4995 "{\n"
4996 "    int s, j;\n"
4997 "    cpu_set_t cpuset;\n"
4998 "    pthread_t thread;\n"
4999 msgstr ""
5000
5001 #. type: Plain text
5002 #: build/C/man3/pthread_setaffinity_np.3:178
5003 #, no-wrap
5004 msgid "    thread = pthread_self();\n"
5005 msgstr ""
5006
5007 #. type: Plain text
5008 #: build/C/man3/pthread_setaffinity_np.3:180
5009 #, no-wrap
5010 msgid "    /* Set affinity mask to include CPUs 0 to 7 */\n"
5011 msgstr ""
5012
5013 #. type: Plain text
5014 #: build/C/man3/pthread_setaffinity_np.3:184
5015 #, no-wrap
5016 msgid ""
5017 "    CPU_ZERO(&cpuset);\n"
5018 "    for (j = 0; j E<lt> 8; j++)\n"
5019 "        CPU_SET(j, &cpuset);\n"
5020 msgstr ""
5021
5022 #. type: Plain text
5023 #: build/C/man3/pthread_setaffinity_np.3:188
5024 #, no-wrap
5025 msgid ""
5026 "    s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);\n"
5027 "    if (s != 0)\n"
5028 "        handle_error_en(s, \"pthread_setaffinity_np\");\n"
5029 msgstr ""
5030
5031 #. type: Plain text
5032 #: build/C/man3/pthread_setaffinity_np.3:190
5033 #, no-wrap
5034 msgid "    /* Check the actual affinity mask assigned to the thread */\n"
5035 msgstr ""
5036
5037 #. type: Plain text
5038 #: build/C/man3/pthread_setaffinity_np.3:194
5039 #, no-wrap
5040 msgid ""
5041 "    s = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);\n"
5042 "    if (s != 0)\n"
5043 "        handle_error_en(s, \"pthread_getaffinity_np\");\n"
5044 msgstr ""
5045
5046 #. type: Plain text
5047 #: build/C/man3/pthread_setaffinity_np.3:199
5048 #, no-wrap
5049 msgid ""
5050 "    printf(\"Set returned by pthread_getaffinity_np() contained:\\en\");\n"
5051 "    for (j = 0; j E<lt> CPU_SETSIZE; j++)\n"
5052 "        if (CPU_ISSET(j, &cpuset))\n"
5053 "            printf(\"    CPU %d\\en\", j);\n"
5054 msgstr ""
5055
5056 #. type: Plain text
5057 #: build/C/man3/pthread_setaffinity_np.3:202 build/C/man3/pthread_setschedparam.3:427
5058 #, no-wrap
5059 msgid ""
5060 "    exit(EXIT_SUCCESS);\n"
5061 "}\n"
5062 msgstr ""
5063
5064 #. type: Plain text
5065 #: build/C/man3/pthread_setaffinity_np.3:211
5066 msgid ""
5067 "B<sched_setaffinity>(2), B<sched_setscheduler>(2), "
5068 "B<pthread_attr_setaffinity_np>(3), B<pthread_self>(3), B<sched_getcpu>(3), "
5069 "B<cpuset>(7), B<pthreads>(7)"
5070 msgstr ""
5071
5072 #. type: TH
5073 #: build/C/man3/pthread_setcancelstate.3:24
5074 #, no-wrap
5075 msgid "PTHREAD_SETCANCELSTATE"
5076 msgstr ""
5077
5078 #. type: Plain text
5079 #: build/C/man3/pthread_setcancelstate.3:28
5080 msgid ""
5081 "pthread_setcancelstate, pthread_setcanceltype - set cancelability state and "
5082 "type"
5083 msgstr ""
5084
5085 #. type: Plain text
5086 #: build/C/man3/pthread_setcancelstate.3:34
5087 #, no-wrap
5088 msgid ""
5089 "B<int pthread_setcancelstate(int >I<state>B<, int *>I<oldstate>B<);>\n"
5090 "B<int pthread_setcanceltype(int >I<type>B<, int *>I<oldtype>B<);>\n"
5091 msgstr ""
5092
5093 #. type: Plain text
5094 #: build/C/man3/pthread_setcancelstate.3:48
5095 msgid ""
5096 "The B<pthread_setcancelstate>()  sets the cancelability state of the calling "
5097 "thread to the value given in I<state>.  The previous cancelability state of "
5098 "the thread is returned in the buffer pointed to by I<oldstate>.  The "
5099 "I<state> argument must have one of the following values:"
5100 msgstr ""
5101
5102 #. type: TP
5103 #: build/C/man3/pthread_setcancelstate.3:48
5104 #, no-wrap
5105 msgid "B<PTHREAD_CANCEL_ENABLE>"
5106 msgstr ""
5107
5108 #. type: Plain text
5109 #: build/C/man3/pthread_setcancelstate.3:55
5110 msgid ""
5111 "The thread is cancelable.  This is the default cancelability state in all "
5112 "new threads, including the initial thread.  The thread's cancelability type "
5113 "determines when a cancelable thread will respond to a cancellation request."
5114 msgstr ""
5115
5116 #. type: TP
5117 #: build/C/man3/pthread_setcancelstate.3:55
5118 #, no-wrap
5119 msgid "B<PTHREAD_CANCEL_DISABLE>"
5120 msgstr ""
5121
5122 #. type: Plain text
5123 #: build/C/man3/pthread_setcancelstate.3:60
5124 msgid ""
5125 "The thread is not cancelable.  If a cancellation request is received, it is "
5126 "blocked until cancelability is enabled."
5127 msgstr ""
5128
5129 #. type: Plain text
5130 #: build/C/man3/pthread_setcancelstate.3:72
5131 msgid ""
5132 "The B<pthread_setcanceltype>()  sets the cancelability type of the calling "
5133 "thread to the value given in I<type>.  The previous cancelability type of "
5134 "the thread is returned in the buffer pointed to by I<oldtype>.  The I<type> "
5135 "argument must have one of the following values:"
5136 msgstr ""
5137
5138 #. type: TP
5139 #: build/C/man3/pthread_setcancelstate.3:72
5140 #, no-wrap
5141 msgid "B<PTHREAD_CANCEL_DEFERRED>"
5142 msgstr ""
5143
5144 #. type: Plain text
5145 #: build/C/man3/pthread_setcancelstate.3:79
5146 msgid ""
5147 "A cancellation request is deferred until the thread next calls a function "
5148 "that is a cancellation point (see B<pthreads>(7)).  This is the default "
5149 "cancelability type in all new threads, including the initial thread."
5150 msgstr ""
5151
5152 #. type: TP
5153 #: build/C/man3/pthread_setcancelstate.3:79
5154 #, no-wrap
5155 msgid "B<PTHREAD_CANCEL_ASYNCHRONOUS>"
5156 msgstr ""
5157
5158 #. type: Plain text
5159 #: build/C/man3/pthread_setcancelstate.3:85
5160 msgid ""
5161 "The thread can be canceled at any time.  (Typically, it will be canceled "
5162 "immediately upon receiving a cancellation request, but the system doesn't "
5163 "guarantee this.)"
5164 msgstr ""
5165
5166 #. type: Plain text
5167 #: build/C/man3/pthread_setcancelstate.3:89
5168 msgid ""
5169 "The set-and-get operation performed by each of these functions is atomic "
5170 "with respect to other threads in the process calling the same function."
5171 msgstr ""
5172
5173 #. type: Plain text
5174 #: build/C/man3/pthread_setcancelstate.3:96
5175 msgid "The B<pthread_setcancelstate>()  can fail with the following error:"
5176 msgstr ""
5177
5178 #. type: Plain text
5179 #: build/C/man3/pthread_setcancelstate.3:100
5180 msgid "Invalid value for I<state>."
5181 msgstr ""
5182
5183 #. type: Plain text
5184 #: build/C/man3/pthread_setcancelstate.3:104
5185 msgid "The B<pthread_setcanceltype>()  can fail with the following error:"
5186 msgstr ""
5187
5188 #.  .SH VERSIONS
5189 #.  Available since glibc 2.0
5190 #. type: Plain text
5191 #: build/C/man3/pthread_setcancelstate.3:110
5192 msgid "Invalid value for I<type>."
5193 msgstr ""
5194
5195 #. type: Plain text
5196 #: build/C/man3/pthread_setcancelstate.3:115
5197 msgid ""
5198 "For details of what happens when a thread is canceled, see "
5199 "B<pthread_cancel>(3)."
5200 msgstr ""
5201
5202 #. type: Plain text
5203 #: build/C/man3/pthread_setcancelstate.3:122
5204 msgid ""
5205 "Briefly disabling cancelability is useful if a thread performs some critical "
5206 "action that must not be interrupted by a cancellation request.  Beware of "
5207 "disabling cancelability for long periods, or around operations that may "
5208 "block for long periods, since that will render the thread unresponsive to "
5209 "cancellation requests."
5210 msgstr ""
5211
5212 #. type: Plain text
5213 #: build/C/man3/pthread_setcancelstate.3:153
5214 msgid ""
5215 "Setting the cancelability type to B<PTHREAD_CANCEL_ASYNCHRONOUS> is rarely "
5216 "useful.  Since the thread could be canceled at I<any> time, it cannot safely "
5217 "reserve resources (e.g., allocating memory with B<malloc>(3)), acquire "
5218 "mutexes, semaphores, or locks, and so on.  Reserving resources is unsafe "
5219 "because the application has no way of knowing what the state of these "
5220 "resources is when the thread is canceled; that is, did cancellation occur "
5221 "before the resources were reserved, while they were reserved, or after they "
5222 "were released? Furthermore, some internal data structures (e.g., the linked "
5223 "list of free blocks managed by the B<malloc>(3)  family of functions) may be "
5224 "left in an inconsistent state if cancellation occurs in the middle of the "
5225 "function call.  Consequently, clean-up handlers cease to be useful.  "
5226 "Functions that can be safely asynchronously canceled are called "
5227 "I<async-cancel-safe functions>.  POSIX.1-2001 only requires that "
5228 "B<pthread_cancel>(3), B<pthread_setcancelstate>(), and "
5229 "B<pthread_setcanceltype>()  be async-cancel-safe.  In general, other library "
5230 "functions can't be safely called from an asynchronously cancelable thread.  "
5231 "One of the few circumstances in which asynchronous cancelability is useful "
5232 "is for cancellation of a thread that is in a pure compute-bound loop."
5233 msgstr ""
5234
5235 #.  It looks like at least Solaris, FreeBSD and Tru64 support this.
5236 #. type: Plain text
5237 #: build/C/man3/pthread_setcancelstate.3:171
5238 msgid ""
5239 "The Linux threading implementations permit the I<oldstate> argument of "
5240 "B<pthread_setcancelstate>()  to be NULL, in which case the information about "
5241 "the previous cancelability state is not returned to the caller.  Many other "
5242 "implementations also permit a NULL I<oldstat> argument, but POSIX.1-2001 "
5243 "does not specify this point, so portable applications should always specify "
5244 "a non-NULL value in I<oldstate>.  A precisely analogous set of statements "
5245 "applies for the I<oldtype> argument of B<pthread_setcanceltype>()."
5246 msgstr ""
5247
5248 #. type: Plain text
5249 #: build/C/man3/pthread_setcancelstate.3:174
5250 msgid "See B<pthread_cancel>(3)."
5251 msgstr ""
5252
5253 #. type: Plain text
5254 #: build/C/man3/pthread_setcancelstate.3:179
5255 msgid ""
5256 "B<pthread_cancel>(3), B<pthread_cleanup_push>(3), B<pthread_testcancel>(3), "
5257 "B<pthreads>(7)"
5258 msgstr ""
5259
5260 #. type: TH
5261 #: build/C/man3/pthread_setconcurrency.3:23
5262 #, no-wrap
5263 msgid "PTHREAD_SETCONCURRENCY"
5264 msgstr ""
5265
5266 #. type: TH
5267 #: build/C/man3/pthread_setconcurrency.3:23 build/C/man3/pthread_yield.3:23
5268 #, no-wrap
5269 msgid "2009-04-10"
5270 msgstr ""
5271
5272 #. type: Plain text
5273 #: build/C/man3/pthread_setconcurrency.3:27
5274 msgid ""
5275 "pthread_setconcurrency, pthread_getconcurrency - set/get the concurrency "
5276 "level"
5277 msgstr ""
5278
5279 #. type: Plain text
5280 #: build/C/man3/pthread_setconcurrency.3:33
5281 #, no-wrap
5282 msgid ""
5283 "B<int pthread_setconcurrency(int >I<new_level>B<);>\n"
5284 "B<int pthread_getconcurrency(void);>\n"
5285 msgstr ""
5286
5287 #. type: Plain text
5288 #: build/C/man3/pthread_setconcurrency.3:45
5289 msgid ""
5290 "The B<pthread_setconcurrency>()  function informs the implementation of the "
5291 "application's desired concurrency level, specified in I<new_level>.  The "
5292 "implementation only takes this as a hint: POSIX.1 does not specify the level "
5293 "of concurrency that should be provided as a result of calling "
5294 "B<pthread_setconcurrency>()."
5295 msgstr ""
5296
5297 #. type: Plain text
5298 #: build/C/man3/pthread_setconcurrency.3:50
5299 msgid ""
5300 "Specifying I<new_level> as 0 instructs the implementation to manage the "
5301 "concurrency level as it deems appropriate."
5302 msgstr ""
5303
5304 #. type: Plain text
5305 #: build/C/man3/pthread_setconcurrency.3:53
5306 msgid ""
5307 "B<pthread_getconcurrency>()  returns the current value of the concurrency "
5308 "level for this process."
5309 msgstr ""
5310
5311 #. type: Plain text
5312 #: build/C/man3/pthread_setconcurrency.3:58
5313 msgid ""
5314 "On success, B<pthread_setconcurrency>()  returns 0; on error, it returns a "
5315 "nonzero error number."
5316 msgstr ""
5317
5318 #. type: Plain text
5319 #: build/C/man3/pthread_setconcurrency.3:65
5320 msgid ""
5321 "B<pthread_getconcurrency>()  always succeeds, returning the concurrency "
5322 "level set by a previous call to B<pthread_setconcurrency>(), or 0, if "
5323 "B<pthread_setconcurrency>()  has not previously been called."
5324 msgstr ""
5325
5326 #. type: Plain text
5327 #: build/C/man3/pthread_setconcurrency.3:68
5328 msgid "B<pthread_setconcurrency>()  can fail with the following error:"
5329 msgstr ""
5330
5331 #. type: Plain text
5332 #: build/C/man3/pthread_setconcurrency.3:72
5333 msgid "I<new_level> is negative."
5334 msgstr ""
5335
5336 #. type: Plain text
5337 #: build/C/man3/pthread_setconcurrency.3:78
5338 msgid ""
5339 "POSIX.1-2001 also documents an B<EAGAIN> error (\"the value specified by "
5340 "I<new_level> would cause a system resource to be exceeded\")."
5341 msgstr ""
5342
5343 #. type: Plain text
5344 #: build/C/man3/pthread_setconcurrency.3:80
5345 msgid "These functions are available in glibc since version 2.1."
5346 msgstr ""
5347
5348 #. type: Plain text
5349 #: build/C/man3/pthread_setconcurrency.3:84
5350 msgid "The default concurrency level is 0."
5351 msgstr ""
5352
5353 #. type: Plain text
5354 #: build/C/man3/pthread_setconcurrency.3:91
5355 msgid ""
5356 "Concurrency levels are only meaningful for M:N threading implementations, "
5357 "where at any moment a subset of a process's set of user-level threads may be "
5358 "bound to a smaller number of kernel-scheduling entities.  Setting the "
5359 "concurrency level allows the application to give the system a hint as to the "
5360 "number of kernel-scheduling entities that should be provided for efficient "
5361 "execution of the application."
5362 msgstr ""
5363
5364 #. type: Plain text
5365 #: build/C/man3/pthread_setconcurrency.3:97
5366 msgid ""
5367 "Both LinuxThreads and NPTL are 1:1 threading implementations, so setting the "
5368 "concurrency level has no meaning.  In other words, on Linux these functions "
5369 "merely exist for compatibility with other systems, and they have no effect "
5370 "on the execution of a program."
5371 msgstr ""
5372
5373 #. type: Plain text
5374 #: build/C/man3/pthread_setconcurrency.3:100
5375 msgid "B<pthread_attr_setscope>(3), B<pthreads>(7)"
5376 msgstr ""
5377
5378 #. type: TH
5379 #: build/C/man3/pthread_setschedparam.3:24
5380 #, no-wrap
5381 msgid "PTHREAD_SETSCHEDPARAM"
5382 msgstr ""
5383
5384 #. type: Plain text
5385 #: build/C/man3/pthread_setschedparam.3:28
5386 msgid ""
5387 "pthread_setschedparam, pthread_getschedparam - set/get scheduling policy and "
5388 "parameters of a thread"
5389 msgstr ""
5390
5391 #. type: Plain text
5392 #: build/C/man3/pthread_setschedparam.3:36
5393 #, no-wrap
5394 msgid ""
5395 "B<pthread_setschedparam(pthread_t >I<thread>B<, int >I<policy>B<,>\n"
5396 "B<                      const struct sched_param *>I<param>B<);>\n"
5397 "B<pthread_getschedparam(pthread_t >I<thread>B<, int *>I<policy>B<,>\n"
5398 "B<                      struct sched_param *>I<param>B<);>\n"
5399 msgstr ""
5400
5401 #. type: Plain text
5402 #: build/C/man3/pthread_setschedparam.3:43
5403 msgid ""
5404 "The B<pthread_setschedparam>()  function sets the scheduling policy and "
5405 "parameters of the thread I<thread>."
5406 msgstr ""
5407
5408 #.  FIXME . pthread_setschedparam() places no restriction on the policy,
5409 #.  but pthread_attr_setschedpolicy() restricts policy to RR/FIFO/OTHER
5410 #.  http://sourceware.org/bugzilla/show_bug.cgi?id=7013
5411 #. type: Plain text
5412 #: build/C/man3/pthread_setschedparam.3:54
5413 msgid ""
5414 "I<policy> specifies the new scheduling policy for I<thread>.  The supported "
5415 "values for I<policy>, and their semantics, are described in "
5416 "B<sched_setscheduler>(2)."
5417 msgstr ""
5418
5419 #. type: Plain text
5420 #: build/C/man3/pthread_setschedparam.3:60
5421 msgid ""
5422 "The structure pointed to by I<param> specifies the new scheduling parameters "
5423 "for I<thread>.  Scheduling parameters are maintained in the following "
5424 "structure:"
5425 msgstr ""
5426
5427 #.  FIXME . nptl/pthread_setschedparam.c has the following
5428 #.    /* If the thread should have higher priority because of some
5429 #.       PTHREAD_PRIO_PROTECT mutexes it holds, adjust the priority. */
5430 #.  Eventually (perhaps after writing the mutexattr pages), we
5431 #.  may want to add something on the topic to this page.
5432 #. type: Plain text
5433 #: build/C/man3/pthread_setschedparam.3:101
5434 msgid ""
5435 "The B<pthread_getschedparam>()  function returns the scheduling policy and "
5436 "parameters of the thread I<thread>, in the buffers pointed to by I<policy> "
5437 "and I<param>, respectively.  The returned priority value is that set by the "
5438 "most recent B<pthread_setschedparam>(), B<pthread_setschedprio>(3), or "
5439 "B<pthread_create>(3)  call that affected I<thread>.  The returned priority "
5440 "does not reflect any temporary priority adjustments as a result of calls to "
5441 "any priority inheritance or priority ceiling functions (see, for example, "
5442 "B<pthread_mutexattr_setprioceiling>(3)  and "
5443 "B<pthread_mutexattr_setprotocol>(3))."
5444 msgstr ""
5445
5446 #. type: Plain text
5447 #: build/C/man3/pthread_setschedparam.3:109
5448 msgid ""
5449 "On success, these functions return 0; on error, they return a nonzero error "
5450 "number.  If B<pthread_setschedparam>()  fails, the scheduling policy and "
5451 "parameters of I<thread> are not changed."
5452 msgstr ""
5453
5454 #. type: Plain text
5455 #: build/C/man3/pthread_setschedparam.3:111
5456 msgid "Both of these functions can fail with the following error:"
5457 msgstr ""
5458
5459 #. type: Plain text
5460 #: build/C/man3/pthread_setschedparam.3:119
5461 msgid "B<pthread_setschedparam>()  may additionally fail with the following errors:"
5462 msgstr ""
5463
5464 #. type: Plain text
5465 #: build/C/man3/pthread_setschedparam.3:126
5466 msgid ""
5467 "I<policy> is not a recognized policy, or I<param> does not make sense for "
5468 "the I<policy>."
5469 msgstr ""
5470
5471 #. type: Plain text
5472 #: build/C/man3/pthread_setschedparam.3:130
5473 msgid ""
5474 "The caller does not have appropriate privileges to set the specified "
5475 "scheduling policy and parameters."
5476 msgstr ""
5477
5478 #.  .SH VERSIONS
5479 #.  Available since glibc 2.0
5480 #. type: Plain text
5481 #: build/C/man3/pthread_setschedparam.3:138
5482 msgid ""
5483 "POSIX.1-2001 also documents an B<ENOTSUP> (\"attempt was made to set the "
5484 "policy or scheduling parameters to an unsupported value\") error for "
5485 "B<pthread_setschedparam>()."
5486 msgstr ""
5487
5488 #. type: Plain text
5489 #: build/C/man3/pthread_setschedparam.3:146
5490 msgid ""
5491 "For a description of the permissions required to, and the effect of, "
5492 "changing a thread's scheduling policy and priority, and details of the "
5493 "permitted ranges for priorities in each scheduling policy, see "
5494 "B<sched_setscheduler>(2)."
5495 msgstr ""
5496
5497 #. type: Plain text
5498 #: build/C/man3/pthread_setschedparam.3:153
5499 msgid ""
5500 "The program below demonstrates the use of B<pthread_setschedparam>()  and "
5501 "B<pthread_getschedparam>(), as well as the use of a number of other "
5502 "scheduling-related pthreads functions."
5503 msgstr ""
5504
5505 #. type: Plain text
5506 #: build/C/man3/pthread_setschedparam.3:169
5507 msgid ""
5508 "In the following run, the main thread sets its scheduling policy to "
5509 "B<SCHED_FIFO> with a priority of 10, and initializes a thread attributes "
5510 "object with a scheduling policy attribute of B<SCHED_RR> and a scheduling "
5511 "priority attribute of 20.  The program then sets (using "
5512 "B<pthread_attr_setinheritsched>(3))  the inherit scheduler attribute of the "
5513 "thread attributes object to B<PTHREAD_EXPLICIT_SCHED>, meaning that threads "
5514 "created using this attributes object should take their scheduling attributes "
5515 "from the thread attributes object.  The program then creates a thread using "
5516 "the thread attributes object, and that thread displays its scheduling policy "
5517 "and priority."
5518 msgstr ""
5519
5520 #. type: Plain text
5521 #: build/C/man3/pthread_setschedparam.3:177
5522 #, no-wrap
5523 msgid ""
5524 "$ B<su>      # Need privilege to set real-time scheduling policies\n"
5525 "Password:\n"
5526 "# B<./a.out -mf10 -ar20 -i e>\n"
5527 "Scheduler settings of main thread\n"
5528 "    policy=SCHED_FIFO, priority=10\n"
5529 msgstr ""
5530
5531 #. type: Plain text
5532 #: build/C/man3/pthread_setschedparam.3:181
5533 #, no-wrap
5534 msgid ""
5535 "Scheduler settings in \\(aqattr\\(aq\n"
5536 "    policy=SCHED_RR, priority=20\n"
5537 "    inheritsched is EXPLICIT\n"
5538 msgstr ""
5539
5540 #. type: Plain text
5541 #: build/C/man3/pthread_setschedparam.3:184
5542 #, no-wrap
5543 msgid ""
5544 "Scheduler attributes of new thread\n"
5545 "    policy=SCHED_RR, priority=20\n"
5546 msgstr ""
5547
5548 #. type: Plain text
5549 #: build/C/man3/pthread_setschedparam.3:189
5550 msgid ""
5551 "In the above output, one can see that the scheduling policy and priority "
5552 "were taken from the values specified in the thread attributes object."
5553 msgstr ""
5554
5555 #. type: Plain text
5556 #: build/C/man3/pthread_setschedparam.3:196
5557 msgid ""
5558 "The next run is the same as the previous, except that the inherit scheduler "
5559 "attribute is set to B<PTHREAD_INHERIT_SCHED>, meaning that threads created "
5560 "using the thread attributes object should ignore the scheduling attributes "
5561 "specified in the attributes object and instead take their scheduling "
5562 "attributes from the creating thread."
5563 msgstr ""
5564
5565 #. type: Plain text
5566 #: build/C/man3/pthread_setschedparam.3:202
5567 #, no-wrap
5568 msgid ""
5569 "# B<./a.out -mf10 -ar20 -i i>\n"
5570 "Scheduler settings of main thread\n"
5571 "    policy=SCHED_FIFO, priority=10\n"
5572 msgstr ""
5573
5574 #. type: Plain text
5575 #: build/C/man3/pthread_setschedparam.3:206
5576 #, no-wrap
5577 msgid ""
5578 "Scheduler settings in \\(aqattr\\(aq\n"
5579 "    policy=SCHED_RR, priority=20\n"
5580 "    inheritsched is INHERIT\n"
5581 msgstr ""
5582
5583 #. type: Plain text
5584 #: build/C/man3/pthread_setschedparam.3:209
5585 #, no-wrap
5586 msgid ""
5587 "Scheduler attributes of new thread\n"
5588 "    policy=SCHED_FIFO, priority=10\n"
5589 msgstr ""
5590
5591 #. type: Plain text
5592 #: build/C/man3/pthread_setschedparam.3:215
5593 msgid ""
5594 "In the above output, one can see that the scheduling policy and priority "
5595 "were taken from the creating thread, rather than the thread attributes "
5596 "object."
5597 msgstr ""
5598
5599 #. type: Plain text
5600 #: build/C/man3/pthread_setschedparam.3:221
5601 msgid ""
5602 "Note that if we had omitted the I<-i\\ i> option, the output would have been "
5603 "the same, since B<PTHREAD_INHERIT_SCHED> is the default for the inherit "
5604 "scheduler attribute."
5605 msgstr ""
5606
5607 #. type: Plain text
5608 #: build/C/man3/pthread_setschedparam.3:225
5609 #, no-wrap
5610 msgid "/* pthreads_sched_test.c */\n"
5611 msgstr ""
5612
5613 #. type: Plain text
5614 #: build/C/man3/pthread_setschedparam.3:231
5615 #, no-wrap
5616 msgid ""
5617 "#include E<lt>pthread.hE<gt>\n"
5618 "#include E<lt>stdio.hE<gt>\n"
5619 "#include E<lt>stdlib.hE<gt>\n"
5620 "#include E<lt>unistd.hE<gt>\n"
5621 "#include E<lt>errno.hE<gt>\n"
5622 msgstr ""
5623
5624 #. type: Plain text
5625 #: build/C/man3/pthread_setschedparam.3:240
5626 #, no-wrap
5627 msgid ""
5628 "static void\n"
5629 "usage(char *prog_name, char *msg)\n"
5630 "{\n"
5631 "    if (msg != NULL)\n"
5632 "        fputs(msg, stderr);\n"
5633 msgstr ""
5634
5635 #. type: Plain text
5636 #: build/C/man3/pthread_setschedparam.3:257
5637 #, no-wrap
5638 msgid ""
5639 "    fprintf(stderr, \"Usage: %s [options]\\en\", prog_name);\n"
5640 "    fprintf(stderr, \"Options are:\\en\");\n"
5641 "#define fpe(msg) fprintf(stderr, \"\\et%s\", msg);          /* Shorter */\n"
5642 "    fpe(\"-aE<lt>policyE<gt>E<lt>prioE<gt> Set scheduling policy and "
5643 "priority in\\en\");\n"
5644 "    fpe(\"                 thread attributes object\\en\");\n"
5645 "    fpe(\"                 E<lt>policyE<gt> can be\\en\");\n"
5646 "    fpe(\"                     f  SCHED_FIFO\\en\");\n"
5647 "    fpe(\"                     r  SCHED_RR\\en\");\n"
5648 "    fpe(\"                     o  SCHED_OTHER\\en\");\n"
5649 "    fpe(\"-A               Use default thread attributes object\\en\");\n"
5650 "    fpe(\"-i {e|s}         Set inherit scheduler attribute to\\en\");\n"
5651 "    fpe(\"                 \\(aqexplicit\\(aq or \\(aqinherit\\(aq\\en\");\n"
5652 "    fpe(\"-mE<lt>policyE<gt>E<lt>prioE<gt> Set scheduling policy and "
5653 "priority on\\en\");\n"
5654 "    fpe(\"                 main thread before pthread_create() "
5655 "call\\en\");\n"
5656 "    exit(EXIT_FAILURE);\n"
5657 "}\n"
5658 msgstr ""
5659
5660 #. type: Plain text
5661 #: build/C/man3/pthread_setschedparam.3:268
5662 #, no-wrap
5663 msgid ""
5664 "static int\n"
5665 "get_policy(char p, int *policy)\n"
5666 "{\n"
5667 "    switch (p) {\n"
5668 "    case \\(aqf\\(aq: *policy = SCHED_FIFO;     return 1;\n"
5669 "    case \\(aqr\\(aq: *policy = SCHED_RR;       return 1;\n"
5670 "    case \\(aqo\\(aq: *policy = SCHED_OTHER;    return 1;\n"
5671 "    default:  return 0;\n"
5672 "    }\n"
5673 "}\n"
5674 msgstr ""
5675
5676 #. type: Plain text
5677 #: build/C/man3/pthread_setschedparam.3:279
5678 #, no-wrap
5679 msgid ""
5680 "static void\n"
5681 "display_sched_attr(int policy, struct sched_param *param)\n"
5682 "{\n"
5683 "    printf(\"    policy=%s, priority=%d\\en\",\n"
5684 "            (policy == SCHED_FIFO)  ? \"SCHED_FIFO\" :\n"
5685 "            (policy == SCHED_RR)    ? \"SCHED_RR\" :\n"
5686 "            (policy == SCHED_OTHER) ? \"SCHED_OTHER\" :\n"
5687 "            \"???\",\n"
5688 "            param-E<gt>sched_priority);\n"
5689 "}\n"
5690 msgstr ""
5691
5692 #. type: Plain text
5693 #: build/C/man3/pthread_setschedparam.3:285
5694 #, no-wrap
5695 msgid ""
5696 "static void\n"
5697 "display_thread_sched_attr(char *msg)\n"
5698 "{\n"
5699 "    int policy, s;\n"
5700 "    struct sched_param param;\n"
5701 msgstr ""
5702
5703 #. type: Plain text
5704 #: build/C/man3/pthread_setschedparam.3:289
5705 #, no-wrap
5706 msgid ""
5707 "    s = pthread_getschedparam(pthread_self(), &policy, &param);\n"
5708 "    if (s != 0)\n"
5709 "        handle_error_en(s, \"pthread_getschedparam\");\n"
5710 msgstr ""
5711
5712 #. type: Plain text
5713 #: build/C/man3/pthread_setschedparam.3:293
5714 #, no-wrap
5715 msgid ""
5716 "    printf(\"%s\\en\", msg);\n"
5717 "    display_sched_attr(policy, &param);\n"
5718 "}\n"
5719 msgstr ""
5720
5721 #. type: Plain text
5722 #: build/C/man3/pthread_setschedparam.3:298
5723 #, no-wrap
5724 msgid ""
5725 "static void *\n"
5726 "thread_start(void *arg)\n"
5727 "{\n"
5728 "    display_thread_sched_attr(\"Scheduler attributes of new thread\");\n"
5729 msgstr ""
5730
5731 #. type: Plain text
5732 #: build/C/man3/pthread_setschedparam.3:301
5733 #, no-wrap
5734 msgid ""
5735 "    return NULL;\n"
5736 "}\n"
5737 msgstr ""
5738
5739 #. type: Plain text
5740 #: build/C/man3/pthread_setschedparam.3:311
5741 #, no-wrap
5742 msgid ""
5743 "int\n"
5744 "main(int argc, char *argv[])\n"
5745 "{\n"
5746 "    int s, opt, inheritsched, use_null_attrib, policy;\n"
5747 "    pthread_t thread;\n"
5748 "    pthread_attr_t attr;\n"
5749 "    pthread_attr_t *attrp;\n"
5750 "    char *attr_sched_str, *main_sched_str, *inheritsched_str;\n"
5751 "    struct sched_param param;\n"
5752 msgstr ""
5753
5754 #. type: Plain text
5755 #: build/C/man3/pthread_setschedparam.3:313
5756 #, no-wrap
5757 msgid "    /* Process command-line options */\n"
5758 msgstr ""
5759
5760 #. type: Plain text
5761 #: build/C/man3/pthread_setschedparam.3:318
5762 #, no-wrap
5763 msgid ""
5764 "    use_null_attrib = 0;\n"
5765 "    attr_sched_str = NULL;\n"
5766 "    main_sched_str = NULL;\n"
5767 "    inheritsched_str = NULL;\n"
5768 msgstr ""
5769
5770 #. type: Plain text
5771 #: build/C/man3/pthread_setschedparam.3:328
5772 #, no-wrap
5773 msgid ""
5774 "    while ((opt = getopt(argc, argv, \"a:Ai:m:\")) != -1) {\n"
5775 "        switch (opt) {\n"
5776 "        case \\(aqa\\(aq: attr_sched_str = optarg;      break;\n"
5777 "        case \\(aqA\\(aq: use_null_attrib = 1;          break;\n"
5778 "        case \\(aqi\\(aq: inheritsched_str = optarg;    break;\n"
5779 "        case \\(aqm\\(aq: main_sched_str = optarg;      break;\n"
5780 "        default:  usage(argv[0], \"Unrecognized option\\en\");\n"
5781 "        }\n"
5782 "    }\n"
5783 msgstr ""
5784
5785 #. type: Plain text
5786 #: build/C/man3/pthread_setschedparam.3:332
5787 #, no-wrap
5788 msgid ""
5789 "    if (use_null_attrib &&\n"
5790 "            (inheritsched_str != NULL || attr_sched_str != NULL))\n"
5791 "        usage(argv[0], \"Can\\(aqt specify -A with -i or -a\\en\");\n"
5792 msgstr ""
5793
5794 #. type: Plain text
5795 #: build/C/man3/pthread_setschedparam.3:335
5796 #, no-wrap
5797 msgid ""
5798 "    /* Optionally set scheduling attributes of main thread,\n"
5799 "       and display the attributes */\n"
5800 msgstr ""
5801
5802 #. type: Plain text
5803 #: build/C/man3/pthread_setschedparam.3:340
5804 #, no-wrap
5805 msgid ""
5806 "    if (main_sched_str != NULL) {\n"
5807 "        if (!get_policy(main_sched_str[0], &policy))\n"
5808 "            usage(argv[0], \"Bad policy for main thread (-s)\\en\");\n"
5809 "        param.sched_priority = strtol(&main_sched_str[1], NULL, 0);\n"
5810 msgstr ""
5811
5812 #. type: Plain text
5813 #: build/C/man3/pthread_setschedparam.3:345
5814 #, no-wrap
5815 msgid ""
5816 "        s = pthread_setschedparam(pthread_self(), policy, &param);\n"
5817 "        if (s != 0)\n"
5818 "            handle_error_en(s, \"pthread_setschedparam\");\n"
5819 "    }\n"
5820 msgstr ""
5821
5822 #. type: Plain text
5823 #: build/C/man3/pthread_setschedparam.3:348
5824 #, no-wrap
5825 msgid ""
5826 "    display_thread_sched_attr(\"Scheduler settings of main thread\");\n"
5827 "    printf(\"\\en\");\n"
5828 msgstr ""
5829
5830 #. type: Plain text
5831 #: build/C/man3/pthread_setschedparam.3:350
5832 #, no-wrap
5833 msgid "    /* Initialize thread attributes object according to options */\n"
5834 msgstr ""
5835
5836 #. type: Plain text
5837 #: build/C/man3/pthread_setschedparam.3:359
5838 #, no-wrap
5839 msgid ""
5840 "    if (!use_null_attrib) {\n"
5841 "        s = pthread_attr_init(&attr);\n"
5842 "        if (s != 0)\n"
5843 "            handle_error_en(s, \"pthread_attr_init\");\n"
5844 "        attrp = &attr;\n"
5845 "    }\n"
5846 msgstr ""
5847
5848 #. type: Plain text
5849 #: build/C/man3/pthread_setschedparam.3:367
5850 #, no-wrap
5851 msgid ""
5852 "    if (inheritsched_str != NULL) {\n"
5853 "        if (inheritsched_str[0] == \\(aqe\\(aq)\n"
5854 "            inheritsched = PTHREAD_EXPLICIT_SCHED;\n"
5855 "        else if (inheritsched_str[0] == \\(aqi\\(aq)\n"
5856 "            inheritsched = PTHREAD_INHERIT_SCHED;\n"
5857 "        else\n"
5858 "            usage(argv[0], \"Value for -i must be \\(aqe\\(aq or "
5859 "\\(aqi\\(aq\\en\");\n"
5860 msgstr ""
5861
5862 #. type: Plain text
5863 #: build/C/man3/pthread_setschedparam.3:372
5864 #, no-wrap
5865 msgid ""
5866 "        s = pthread_attr_setinheritsched(&attr, inheritsched);\n"
5867 "        if (s != 0)\n"
5868 "            handle_error_en(s, \"pthread_attr_setinheritsched\");\n"
5869 "    }\n"
5870 msgstr ""
5871
5872 #. type: Plain text
5873 #: build/C/man3/pthread_setschedparam.3:378
5874 #, no-wrap
5875 msgid ""
5876 "    if (attr_sched_str != NULL) {\n"
5877 "        if (!get_policy(attr_sched_str[0], &policy))\n"
5878 "            usage(argv[0],\n"
5879 "                    \"Bad policy for \\(aqattr\\(aq (-a)\\en\");\n"
5880 "        param.sched_priority = strtol(&attr_sched_str[1], NULL, 0);\n"
5881 msgstr ""
5882
5883 #. type: Plain text
5884 #: build/C/man3/pthread_setschedparam.3:386
5885 #, no-wrap
5886 msgid ""
5887 "        s = pthread_attr_setschedpolicy(&attr, policy);\n"
5888 "        if (s != 0)\n"
5889 "            handle_error_en(s, \"pthread_attr_setschedpolicy\");\n"
5890 "        s = pthread_attr_setschedparam(&attr, &param);\n"
5891 "        if (s != 0)\n"
5892 "            handle_error_en(s, \"pthread_attr_setschedparam\");\n"
5893 "    }\n"
5894 msgstr ""
5895
5896 #. type: Plain text
5897 #: build/C/man3/pthread_setschedparam.3:389
5898 #, no-wrap
5899 msgid ""
5900 "    /* If we initialized a thread attributes object, display\n"
5901 "       the scheduling attributes that were set in the object */\n"
5902 msgstr ""
5903
5904 #. type: Plain text
5905 #: build/C/man3/pthread_setschedparam.3:397
5906 #, no-wrap
5907 msgid ""
5908 "    if (attrp != NULL) {\n"
5909 "        s = pthread_attr_getschedparam(&attr, &param);\n"
5910 "        if (s != 0)\n"
5911 "            handle_error_en(s, \"pthread_attr_getschedparam\");\n"
5912 "        s = pthread_attr_getschedpolicy(&attr, &policy);\n"
5913 "        if (s != 0)\n"
5914 "            handle_error_en(s, \"pthread_attr_getschedpolicy\");\n"
5915 msgstr ""
5916
5917 #. type: Plain text
5918 #: build/C/man3/pthread_setschedparam.3:400
5919 #, no-wrap
5920 msgid ""
5921 "        printf(\"Scheduler settings in \\(aqattr\\(aq\\en\");\n"
5922 "        display_sched_attr(policy, &param);\n"
5923 msgstr ""
5924
5925 #. type: Plain text
5926 #: build/C/man3/pthread_setschedparam.3:408
5927 #, no-wrap
5928 msgid ""
5929 "        s = pthread_attr_getinheritsched(&attr, &inheritsched);\n"
5930 "        printf(\"    inheritsched is %s\\en\",\n"
5931 "                (inheritsched == PTHREAD_INHERIT_SCHED)  ? \"INHERIT\" :\n"
5932 "                (inheritsched == PTHREAD_EXPLICIT_SCHED) ? \"EXPLICIT\" :\n"
5933 "                \"???\");\n"
5934 "        printf(\"\\en\");\n"
5935 "    }\n"
5936 msgstr ""
5937
5938 #. type: Plain text
5939 #: build/C/man3/pthread_setschedparam.3:410
5940 #, no-wrap
5941 msgid "    /* Create a thread that will display its scheduling attributes */\n"
5942 msgstr ""
5943
5944 #. type: Plain text
5945 #: build/C/man3/pthread_setschedparam.3:414
5946 #, no-wrap
5947 msgid ""
5948 "    s = pthread_create(&thread, attrp, &thread_start, NULL);\n"
5949 "    if (s != 0)\n"
5950 "        handle_error_en(s, \"pthread_create\");\n"
5951 msgstr ""
5952
5953 #. type: Plain text
5954 #: build/C/man3/pthread_setschedparam.3:416
5955 #, no-wrap
5956 msgid "    /* Destroy unneeded thread attributes object */\n"
5957 msgstr ""
5958
5959 #. type: Plain text
5960 #: build/C/man3/pthread_setschedparam.3:424
5961 #, no-wrap
5962 msgid ""
5963 "    s = pthread_join(thread, NULL);\n"
5964 "    if (s != 0)\n"
5965 "        handle_error_en(s, \"pthread_join\");\n"
5966 msgstr ""
5967
5968 #. type: Plain text
5969 #: build/C/man3/pthread_setschedparam.3:440
5970 msgid ""
5971 "B<getrlimit>(2), B<sched_get_priority_min>(2), B<sched_setscheduler>(2), "
5972 "B<pthread_attr_init>(3), B<pthread_attr_setinheritsched>(3), "
5973 "B<pthread_attr_setschedparam>(3), B<pthread_attr_setschedpolicy>(3), "
5974 "B<pthread_create>(3), B<pthread_self>(3), B<pthread_setschedprio>(3), "
5975 "B<pthreads>(7)"
5976 msgstr ""
5977
5978 #. type: TH
5979 #: build/C/man3/pthread_setschedprio.3:24
5980 #, no-wrap
5981 msgid "PTHREAD_SETSCHEDPRIO"
5982 msgstr ""
5983
5984 #. type: TH
5985 #: build/C/man3/pthread_setschedprio.3:24
5986 #, no-wrap
5987 msgid "2008-11-06"
5988 msgstr ""
5989
5990 #. type: Plain text
5991 #: build/C/man3/pthread_setschedprio.3:27
5992 msgid "pthread_setschedprio - set scheduling priority of a thread"
5993 msgstr ""
5994
5995 #. type: Plain text
5996 #: build/C/man3/pthread_setschedprio.3:32
5997 #, no-wrap
5998 msgid "B<pthread_setschedprio(pthread_t >I<thread>B<, int >I<prio>B<);>\n"
5999 msgstr ""
6000
6001 #.  FIXME . nptl/pthread_setschedprio.c has the following
6002 #.    /* If the thread should have higher priority because of some
6003 #.       PTHREAD_PRIO_PROTECT mutexes it holds, adjust the priority. */
6004 #.  Eventually (perhaps after writing the mutexattr pages), we
6005 #.  may want to add something on the topic to this page.
6006 #.  nptl/pthread_setschedparam.c has a similar case.
6007 #. type: Plain text
6008 #: build/C/man3/pthread_setschedprio.3:50
6009 msgid ""
6010 "The B<pthread_setschedprio>()  function sets the scheduling priority of the "
6011 "thread I<thread> to the value specified in I<prio>.  (By contrast "
6012 "B<pthread_setschedparam>(3)  changes both the scheduling policy and priority "
6013 "of a thread.)"
6014 msgstr ""
6015
6016 #. type: Plain text
6017 #: build/C/man3/pthread_setschedprio.3:58
6018 msgid ""
6019 "On success, this function returns 0; on error, it returns a nonzero error "
6020 "number.  If B<pthread_setschedprio>()  fails, the scheduling priority of "
6021 "I<thread> is not changed."
6022 msgstr ""
6023
6024 #. type: Plain text
6025 #: build/C/man3/pthread_setschedprio.3:63
6026 msgid "I<prio> is not valid for the scheduling policy of the specified thread."
6027 msgstr ""
6028
6029 #. type: Plain text
6030 #: build/C/man3/pthread_setschedprio.3:67
6031 msgid ""
6032 "The caller does not have appropriate privileges to set the specified "
6033 "priority."
6034 msgstr ""
6035
6036 #. type: Plain text
6037 #: build/C/man3/pthread_setschedprio.3:78
6038 msgid ""
6039 "POSIX.1-2001 also documents an B<ENOTSUP> (\"attempt was made to set the "
6040 "priority to an unsupported value\") error for B<pthread_setschedparam>(3)."
6041 msgstr ""
6042
6043 #. type: Plain text
6044 #: build/C/man3/pthread_setschedprio.3:80
6045 msgid "This function is available in glibc since version 2.3.4."
6046 msgstr ""
6047
6048 #. type: Plain text
6049 #: build/C/man3/pthread_setschedprio.3:88
6050 msgid ""
6051 "For a description of the permissions required to, and the effect of, "
6052 "changing a thread's scheduling priority, and details of the permitted ranges "
6053 "for priorities in each scheduling policy, see B<sched_setscheduler>(2)."
6054 msgstr ""
6055
6056 #. type: Plain text
6057 #: build/C/man3/pthread_setschedprio.3:100
6058 msgid ""
6059 "B<getrlimit>(2), B<sched_get_priority_min>(2), B<sched_setscheduler>(2), "
6060 "B<pthread_attr_init>(3), B<pthread_attr_setinheritsched>(3), "
6061 "B<pthread_attr_setschedparam>(3), B<pthread_attr_setschedpolicy>(3), "
6062 "B<pthread_create>(3), B<pthread_self>(3), B<pthread_setschedparam>(3), "
6063 "B<pthreads>(7)"
6064 msgstr ""
6065
6066 #. type: TH
6067 #: build/C/man3/pthread_sigmask.3:24
6068 #, no-wrap
6069 msgid "PTHREAD_SIGMASK"
6070 msgstr ""
6071
6072 #. type: TH
6073 #: build/C/man3/pthread_sigmask.3:24
6074 #, no-wrap
6075 msgid "2011-10-16"
6076 msgstr ""
6077
6078 #. type: Plain text
6079 #: build/C/man3/pthread_sigmask.3:27
6080 msgid "pthread_sigmask - examine and change mask of blocked signals"
6081 msgstr ""
6082
6083 #. type: Plain text
6084 #: build/C/man3/pthread_sigmask.3:33
6085 #, no-wrap
6086 msgid ""
6087 "B<int pthread_sigmask(int >I<how>B<, const sigset_t *>I<set>B<, sigset_t "
6088 "*>I<oldset>B<);>\n"
6089 msgstr ""
6090
6091 #. type: Plain text
6092 #: build/C/man3/pthread_sigmask.3:44
6093 msgid ""
6094 "The B<pthread_sigmask>()  function is just like B<sigprocmask>(2), with the "
6095 "difference that its use in multithreaded programs is explicitly specified by "
6096 "POSIX.1-2001.  Other differences are noted in this page."
6097 msgstr ""
6098
6099 #. type: Plain text
6100 #: build/C/man3/pthread_sigmask.3:47
6101 msgid ""
6102 "For a description of the arguments and operation of this function, see "
6103 "B<sigprocmask>(2)."
6104 msgstr ""
6105
6106 #. type: Plain text
6107 #: build/C/man3/pthread_sigmask.3:52
6108 msgid ""
6109 "On success, B<pthread_sigmask>()  returns 0; on error, it returns an error "
6110 "number."
6111 msgstr ""
6112
6113 #. type: Plain text
6114 #: build/C/man3/pthread_sigmask.3:55
6115 msgid "See B<sigprocmask>(2)."
6116 msgstr ""
6117
6118 #. type: Plain text
6119 #: build/C/man3/pthread_sigmask.3:59
6120 msgid "A new thread inherits a copy of its creator's signal mask."
6121 msgstr ""
6122
6123 #. type: Plain text
6124 #: build/C/man3/pthread_sigmask.3:64
6125 msgid ""
6126 "The program below blocks some signals in the main thread, and then creates a "
6127 "dedicated thread to fetch those signals via B<sigwait>(3).  The following "
6128 "shell session demonstrates its use:"
6129 msgstr ""
6130
6131 #. type: Plain text
6132 #: build/C/man3/pthread_sigmask.3:75
6133 #, no-wrap
6134 msgid ""
6135 "$B< ./a.out &>\n"
6136 "[1] 5423\n"
6137 "$B< kill -QUIT %1>\n"
6138 "Signal handling thread got signal 3\n"
6139 "$B< kill -USR1 %1>\n"
6140 "Signal handling thread got signal 10\n"
6141 "$B< kill -TERM %1>\n"
6142 "[1]+  Terminated              ./a.out\n"
6143 msgstr ""
6144
6145 #. type: Plain text
6146 #: build/C/man3/pthread_sigmask.3:86
6147 #, no-wrap
6148 msgid ""
6149 "#include E<lt>pthread.hE<gt>\n"
6150 "#include E<lt>stdio.hE<gt>\n"
6151 "#include E<lt>stdlib.hE<gt>\n"
6152 "#include E<lt>unistd.hE<gt>\n"
6153 "#include E<lt>signal.hE<gt>\n"
6154 "#include E<lt>errno.hE<gt>\n"
6155 msgstr ""
6156
6157 #. type: Plain text
6158 #: build/C/man3/pthread_sigmask.3:88
6159 #, no-wrap
6160 msgid "/* Simple error handling functions */\n"
6161 msgstr ""
6162
6163 #. type: Plain text
6164 #: build/C/man3/pthread_sigmask.3:97
6165 #, no-wrap
6166 msgid ""
6167 "static void *\n"
6168 "sig_thread(void *arg)\n"
6169 "{\n"
6170 "    sigset_t *set = (sigset_t *) arg;\n"
6171 "    int s, sig;\n"
6172 msgstr ""
6173
6174 #. type: Plain text
6175 #: build/C/man3/pthread_sigmask.3:105
6176 #, no-wrap
6177 msgid ""
6178 "    for (;;) {\n"
6179 "        s = sigwait(set, &sig);\n"
6180 "        if (s != 0)\n"
6181 "            handle_error_en(s, \"sigwait\");\n"
6182 "        printf(\"Signal handling thread got signal %d\\en\", sig);\n"
6183 "    }\n"
6184 "}\n"
6185 msgstr ""
6186
6187 #. type: Plain text
6188 #: build/C/man3/pthread_sigmask.3:112
6189 #, no-wrap
6190 msgid ""
6191 "int\n"
6192 "main(int argc, char *argv[])\n"
6193 "{\n"
6194 "    pthread_t thread;\n"
6195 "    sigset_t set;\n"
6196 "    int s;\n"
6197 msgstr ""
6198
6199 #. type: Plain text
6200 #: build/C/man3/pthread_sigmask.3:115
6201 #, no-wrap
6202 msgid ""
6203 "    /* Block SIGQUIT and SIGUSR1; other threads created by main()\n"
6204 "       will inherit a copy of the signal mask. */\n"
6205 msgstr ""
6206
6207 #. type: Plain text
6208 #: build/C/man3/pthread_sigmask.3:122
6209 #, no-wrap
6210 msgid ""
6211 "    sigemptyset(&set);\n"
6212 "    sigaddset(&set, SIGQUIT);\n"
6213 "    sigaddset(&set, SIGUSR1);\n"
6214 "    s = pthread_sigmask(SIG_BLOCK, &set, NULL);\n"
6215 "    if (s != 0)\n"
6216 "        handle_error_en(s, \"pthread_sigmask\");\n"
6217 msgstr ""
6218
6219 #. type: Plain text
6220 #: build/C/man3/pthread_sigmask.3:126
6221 #, no-wrap
6222 msgid ""
6223 "    s = pthread_create(&thread, NULL, &sig_thread, (void *) &set);\n"
6224 "    if (s != 0)\n"
6225 "        handle_error_en(s, \"pthread_create\");\n"
6226 msgstr ""
6227
6228 #. type: Plain text
6229 #: build/C/man3/pthread_sigmask.3:129
6230 #, no-wrap
6231 msgid ""
6232 "    /* Main thread carries on to create other threads and/or do\n"
6233 "       other work */\n"
6234 msgstr ""
6235
6236 #. type: Plain text
6237 #: build/C/man3/pthread_sigmask.3:132
6238 #, no-wrap
6239 msgid ""
6240 "    pause();            /* Dummy pause so we can test program */\n"
6241 "}\n"
6242 msgstr ""
6243
6244 #. type: Plain text
6245 #: build/C/man3/pthread_sigmask.3:142
6246 msgid ""
6247 "B<sigaction>(2), B<sigpending>(2), B<sigprocmask>(2)  B<pthread_create>(3), "
6248 "B<pthread_kill>(3), B<sigsetops>(3), B<pthreads>(7), B<signal>(7)"
6249 msgstr ""
6250
6251 #. type: TH
6252 #: build/C/man3/pthread_sigqueue.3:23
6253 #, no-wrap
6254 msgid "PTHREAD_SIGQUEUE"
6255 msgstr ""
6256
6257 #. type: TH
6258 #: build/C/man3/pthread_sigqueue.3:23
6259 #, no-wrap
6260 msgid "2011-09-23"
6261 msgstr ""
6262
6263 #. type: Plain text
6264 #: build/C/man3/pthread_sigqueue.3:26
6265 msgid "pthread_sigqueue - queue a signal and data to a thread"
6266 msgstr ""
6267
6268 #. type: Plain text
6269 #: build/C/man3/pthread_sigqueue.3:32
6270 #, no-wrap
6271 msgid ""
6272 "B<int pthread_sigqueue(pthread_t *>I<thread>B<, int >I<sig>B<,>\n"
6273 "B<                     const union sigval >I<value>B<);>\n"
6274 msgstr ""
6275
6276 #. type: Plain text
6277 #: build/C/man3/pthread_sigqueue.3:43
6278 msgid "B<pthread_sigqueue>(): _GNU_SOURCE"
6279 msgstr ""
6280
6281 #. type: Plain text
6282 #: build/C/man3/pthread_sigqueue.3:51
6283 msgid ""
6284 "The B<pthread_sigqueue>()  function performs a similar task to "
6285 "B<sigqueue>(3), but, rather than sending a signal to another process, it "
6286 "sends a signal to another thread in the same process as the calling thread."
6287 msgstr ""
6288
6289 #. type: Plain text
6290 #: build/C/man3/pthread_sigqueue.3:63
6291 msgid ""
6292 "The I<thread> argument is the ID of another thread in the same process as "
6293 "the caller.  The I<sig> argument specifies the signal to be sent.  The "
6294 "I<value> argument specifies data to accompany the signal; see B<sigqueue>(3)  "
6295 "for details."
6296 msgstr ""
6297
6298 #. type: Plain text
6299 #: build/C/man3/pthread_sigqueue.3:68
6300 msgid ""
6301 "On success, B<pthread_sigqueue>()  returns 0; on error, it returns an error "
6302 "number."
6303 msgstr ""
6304
6305 #. type: Plain text
6306 #: build/C/man3/pthread_sigqueue.3:75
6307 msgid ""
6308 "The limit of signals which may be queued has been reached.  (See "
6309 "B<signal>(7)  for further information.)"
6310 msgstr ""
6311
6312 #. type: Plain text
6313 #: build/C/man3/pthread_sigqueue.3:79
6314 msgid "I<sig> was invalid."
6315 msgstr ""
6316
6317 #. type: TP
6318 #: build/C/man3/pthread_sigqueue.3:79
6319 #, no-wrap
6320 msgid "B<ENOSYS>"
6321 msgstr ""
6322
6323 #. type: Plain text
6324 #: build/C/man3/pthread_sigqueue.3:83
6325 msgid "B<pthread_sigqueue>()  is not supported on this system."
6326 msgstr ""
6327
6328 #. type: Plain text
6329 #: build/C/man3/pthread_sigqueue.3:87
6330 msgid "I<thread> is not valid."
6331 msgstr ""
6332
6333 #. type: Plain text
6334 #: build/C/man3/pthread_sigqueue.3:91
6335 msgid "The B<pthread_sigqueue>()  function first appeared in glibc 2.11."
6336 msgstr ""
6337
6338 #. type: Plain text
6339 #: build/C/man3/pthread_sigqueue.3:93
6340 msgid "This function is a GNU extension."
6341 msgstr ""
6342
6343 #. type: Plain text
6344 #: build/C/man3/pthread_sigqueue.3:101
6345 msgid ""
6346 "B<rt_tgsigqueueinfo>(2), B<sigaction>(2), B<sigqueue>(3), B<sigwait>(3), "
6347 "B<pthread_sigmask>(3), B<pthreads>(7), B<signal>(7)"
6348 msgstr ""
6349
6350 #. type: TH
6351 #: build/C/man3/pthread_testcancel.3:24
6352 #, no-wrap
6353 msgid "PTHREAD_TESTCANCEL"
6354 msgstr ""
6355
6356 #. type: Plain text
6357 #: build/C/man3/pthread_testcancel.3:27
6358 msgid "pthread_testcancel - request delivery of any pending cancellation request"
6359 msgstr ""
6360
6361 #. type: Plain text
6362 #: build/C/man3/pthread_testcancel.3:32
6363 #, no-wrap
6364 msgid "B<void pthread_testcancel(void);>\n"
6365 msgstr ""
6366
6367 #. type: Plain text
6368 #: build/C/man3/pthread_testcancel.3:40
6369 msgid ""
6370 "Calling B<pthread_testcancel>()  creates a cancellation point within the "
6371 "calling thread, so that a thread that is otherwise executing code that "
6372 "contains no cancellation points will respond to a cancellation request."
6373 msgstr ""
6374
6375 #. type: Plain text
6376 #: build/C/man3/pthread_testcancel.3:47
6377 msgid ""
6378 "If cancelability is disabled (using B<pthread_setcancelstate>(3)), or no "
6379 "cancellation request is pending, then a call to B<pthread_cancel>(3)  has no "
6380 "effect."
6381 msgstr ""
6382
6383 #. type: Plain text
6384 #: build/C/man3/pthread_testcancel.3:51
6385 msgid ""
6386 "This function does not return a value.  If the calling thread is canceled as "
6387 "a consequence of a call to this function, then the function does not return."
6388 msgstr ""
6389
6390 #. type: Plain text
6391 #: build/C/man3/pthread_testcancel.3:60
6392 msgid "See B<pthread_cleanup_push>(3)."
6393 msgstr ""
6394
6395 #. type: Plain text
6396 #: build/C/man3/pthread_testcancel.3:65
6397 msgid ""
6398 "B<pthread_cancel>(3), B<pthread_cleanup_push>(3), "
6399 "B<pthread_setcancelstate>(3), B<pthreads>(7)"
6400 msgstr ""
6401
6402 #. type: TH
6403 #: build/C/man3/pthread_tryjoin_np.3:24
6404 #, no-wrap
6405 msgid "PTHREAD_TRYJOIN_NP"
6406 msgstr ""
6407
6408 #. type: Plain text
6409 #: build/C/man3/pthread_tryjoin_np.3:28
6410 msgid ""
6411 "pthread_tryjoin_np, pthread_timedjoin_np - try to join with a terminated "
6412 "thread"
6413 msgstr ""
6414
6415 #. type: Plain text
6416 #: build/C/man3/pthread_tryjoin_np.3:34
6417 #, no-wrap
6418 msgid "B<int pthread_tryjoin_np(pthread_t >I<thread>B<, void **>I<retval>B<);>\n"
6419 msgstr ""
6420
6421 #. type: Plain text
6422 #: build/C/man3/pthread_tryjoin_np.3:37
6423 #, no-wrap
6424 msgid ""
6425 "B<int pthread_timedjoin_np(pthread_t >I<thread>B<, void **>I<retval>B<,>\n"
6426 "B<                         const struct timespec *>I<abstime>B<);>\n"
6427 msgstr ""
6428
6429 #. type: Plain text
6430 #: build/C/man3/pthread_tryjoin_np.3:44
6431 msgid ""
6432 "These functions operate in the same way as B<pthread_join>(3), except for "
6433 "the differences described on this page."
6434 msgstr ""
6435
6436 #. type: Plain text
6437 #: build/C/man3/pthread_tryjoin_np.3:56
6438 msgid ""
6439 "The B<pthread_tryjoin_np>()  function performs a nonblocking join with the "
6440 "thread I<thread>, returning the exit status of the thread in I<*retval>.  If "
6441 "I<thread> has not yet terminated, then instead of blocking, as is done by "
6442 "B<pthread_join>(3), the call returns an error."
6443 msgstr ""
6444
6445 #. type: Plain text
6446 #: build/C/man3/pthread_tryjoin_np.3:74
6447 msgid ""
6448 "The B<pthread_timedjoin_np>()  function performs a join-with-timeout.  If "
6449 "I<thread> has not yet terminated, then the call blocks until a maximum time, "
6450 "specified in I<abstime>.  If the timeout expires before I<thread> "
6451 "terminates, the call returns an error.  The I<abstime> argument is a "
6452 "structure of the following form, specifying an absolute time measured since "
6453 "the Epoch (see B<time>(2)):"
6454 msgstr ""
6455
6456 #. type: Plain text
6457 #: build/C/man3/pthread_tryjoin_np.3:81
6458 #, no-wrap
6459 msgid ""
6460 "struct timespec {\n"
6461 "    time_t tv_sec;     /* seconds */\n"
6462 "    long   tv_nsec;    /* nanoseconds */\n"
6463 "};\n"
6464 msgstr ""
6465
6466 #. type: Plain text
6467 #: build/C/man3/pthread_tryjoin_np.3:87
6468 msgid "On success, these functions return 0; on error, they return an error number."
6469 msgstr ""
6470
6471 #. type: Plain text
6472 #: build/C/man3/pthread_tryjoin_np.3:92
6473 msgid ""
6474 "These functions can fail with the same errors as B<pthread_join>(3).  "
6475 "B<pthread_tryjoin_np>()  can in addition fail with the following error:"
6476 msgstr ""
6477
6478 #. type: TP
6479 #: build/C/man3/pthread_tryjoin_np.3:92
6480 #, no-wrap
6481 msgid "B<EBUSY>"
6482 msgstr ""
6483
6484 #. type: Plain text
6485 #: build/C/man3/pthread_tryjoin_np.3:96
6486 msgid "I<thread> had not yet terminated at the time of the call."
6487 msgstr ""
6488
6489 #. type: Plain text
6490 #: build/C/man3/pthread_tryjoin_np.3:99
6491 msgid "B<pthread_timedjoin_np>()  can in addition fail with the following error:"
6492 msgstr ""
6493
6494 #. type: TP
6495 #: build/C/man3/pthread_tryjoin_np.3:99
6496 #, no-wrap
6497 msgid "B<ETIMEDOUT>"
6498 msgstr ""
6499
6500 #. type: Plain text
6501 #: build/C/man3/pthread_tryjoin_np.3:104
6502 msgid "The call timed out before I<thread> terminated."
6503 msgstr ""
6504
6505 #. type: Plain text
6506 #: build/C/man3/pthread_tryjoin_np.3:108
6507 msgid "B<pthread_timedjoin_np>()  never returns the error B<EINTR>."
6508 msgstr ""
6509
6510 #. type: Plain text
6511 #: build/C/man3/pthread_tryjoin_np.3:110
6512 msgid "These functions first appeared in glibc in version 2.3.3."
6513 msgstr ""
6514
6515 #. type: Plain text
6516 #: build/C/man3/pthread_tryjoin_np.3:115
6517 msgid "The following code waits to join for up to 5 seconds:"
6518 msgstr ""
6519
6520 #. type: Plain text
6521 #: build/C/man3/pthread_tryjoin_np.3:119
6522 #, no-wrap
6523 msgid ""
6524 "    struct timespec ts;\n"
6525 "    int s;\n"
6526 msgstr ""
6527
6528 #. type: Plain text
6529 #: build/C/man3/pthread_tryjoin_np.3:121
6530 #, no-wrap
6531 msgid "    ...\n"
6532 msgstr ""
6533
6534 #. type: Plain text
6535 #: build/C/man3/pthread_tryjoin_np.3:125
6536 #, no-wrap
6537 msgid ""
6538 "    if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {\n"
6539 "\t/* Handle error */\n"
6540 "    }\n"
6541 msgstr ""
6542
6543 #. type: Plain text
6544 #: build/C/man3/pthread_tryjoin_np.3:127
6545 #, no-wrap
6546 msgid "    ts.tv_sec += 5;\n"
6547 msgstr ""
6548
6549 #. type: Plain text
6550 #: build/C/man3/pthread_tryjoin_np.3:132
6551 #, no-wrap
6552 msgid ""
6553 "    s = pthread_timedjoin_np(thread, NULL, &ts);\n"
6554 "    if (s != 0) {\n"
6555 "        /* Handle error */\n"
6556 "    }\n"
6557 msgstr ""
6558
6559 #. type: Plain text
6560 #: build/C/man3/pthread_tryjoin_np.3:138
6561 msgid "B<clock_gettime>(2), B<pthread_exit>(3), B<pthread_join>(3), B<pthreads>(7)"
6562 msgstr ""
6563
6564 #. type: TH
6565 #: build/C/man3/pthread_yield.3:23
6566 #, no-wrap
6567 msgid "PTHREAD_YIELD"
6568 msgstr ""
6569
6570 #. type: Plain text
6571 #: build/C/man3/pthread_yield.3:26
6572 msgid "pthread_yield - yield the processor"
6573 msgstr ""
6574
6575 #. type: Plain text
6576 #: build/C/man3/pthread_yield.3:31
6577 #, no-wrap
6578 msgid "B<int pthread_yield(void);>\n"
6579 msgstr ""
6580
6581 #. type: Plain text
6582 #: build/C/man3/pthread_yield.3:41
6583 msgid ""
6584 "B<pthread_yield>()  causes the calling thread to relinquish the CPU.  The "
6585 "thread is placed at the end of the run queue for its static priority and "
6586 "another thread is scheduled to run.  For further details, see "
6587 "B<sched_yield>(2)"
6588 msgstr ""
6589
6590 #. type: Plain text
6591 #: build/C/man3/pthread_yield.3:46
6592 msgid ""
6593 "On success, B<pthread_yield>()  returns 0; on error, it returns an error "
6594 "number."
6595 msgstr ""
6596
6597 #. type: Plain text
6598 #: build/C/man3/pthread_yield.3:50
6599 msgid ""
6600 "On Linux, this call always succeeds (but portable and future-proof "
6601 "applications should nevertheless handle a possible error return)."
6602 msgstr ""
6603
6604 #.  e.g., the BSDs, Tru64, AIX, and Irix.
6605 #. type: Plain text
6606 #: build/C/man3/pthread_yield.3:56
6607 msgid ""
6608 "This call is nonstandard, but present on several other systems.  Use the "
6609 "standardized B<sched_yield>(2)  instead."
6610 msgstr ""
6611
6612 #. type: Plain text
6613 #: build/C/man3/pthread_yield.3:59
6614 msgid "On Linux, this function is implemented as a call to B<sched_yield>(2)."
6615 msgstr ""
6616
6617 #. type: Plain text
6618 #: build/C/man3/pthread_yield.3:63
6619 msgid "B<sched_setscheduler>(2), B<sched_yield>(2)  B<pthreads>(7)"
6620 msgstr ""
6621
6622 #. type: TH
6623 #: build/C/man7/pthreads.7:24
6624 #, no-wrap
6625 msgid "PTHREADS"
6626 msgstr ""
6627
6628 #. type: TH
6629 #: build/C/man7/pthreads.7:24
6630 #, no-wrap
6631 msgid "2010-11-14"
6632 msgstr ""
6633
6634 #. type: Plain text
6635 #: build/C/man7/pthreads.7:27
6636 msgid "pthreads - POSIX threads"
6637 msgstr ""
6638
6639 #. type: Plain text
6640 #: build/C/man7/pthreads.7:34
6641 msgid ""
6642 "POSIX.1 specifies a set of interfaces (functions, header files) for threaded "
6643 "programming commonly known as POSIX threads, or Pthreads.  A single process "
6644 "can contain multiple threads, all of which are executing the same program.  "
6645 "These threads share the same global memory (data and heap segments), but "
6646 "each thread has its own stack (automatic variables)."
6647 msgstr ""
6648
6649 #. type: Plain text
6650 #: build/C/man7/pthreads.7:37
6651 msgid ""
6652 "POSIX.1 also requires that threads share a range of other attributes (i.e., "
6653 "these attributes are process-wide rather than per-thread):"
6654 msgstr ""
6655
6656 #. type: IP
6657 #: build/C/man7/pthreads.7:37 build/C/man7/pthreads.7:39 build/C/man7/pthreads.7:41 build/C/man7/pthreads.7:43 build/C/man7/pthreads.7:45 build/C/man7/pthreads.7:47 build/C/man7/pthreads.7:49 build/C/man7/pthreads.7:52 build/C/man7/pthreads.7:54 build/C/man7/pthreads.7:57 build/C/man7/pthreads.7:63 build/C/man7/pthreads.7:68 build/C/man7/pthreads.7:71 build/C/man7/pthreads.7:74 build/C/man7/pthreads.7:82 build/C/man7/pthreads.7:86 build/C/man7/pthreads.7:89 build/C/man7/pthreads.7:93 build/C/man7/pthreads.7:96 build/C/man7/pthreads.7:103 build/C/man7/pthreads.7:106 build/C/man7/pthreads.7:683 build/C/man7/pthreads.7:690 build/C/man7/pthreads.7:702 build/C/man7/pthreads.7:712 build/C/man7/pthreads.7:716 build/C/man7/pthreads.7:725 build/C/man7/pthreads.7:735 build/C/man7/pthreads.7:742 build/C/man7/pthreads.7:749 build/C/man7/pthreads.7:751 build/C/man7/pthreads.7:754 build/C/man7/pthreads.7:760 build/C/man7/pthreads.7:763 build/C/man7/pthreads.7:765 build/C/man7/pthreads.7:767 build/C/man7/pthreads.7:777 build/C/man7/pthreads.7:797 build/C/man7/pthreads.7:806 build/C/man7/pthreads.7:812 build/C/man7/pthreads.7:814 build/C/man7/pthreads.7:816 build/C/man7/pthreads.7:820 build/C/man7/pthreads.7:825 build/C/man7/pthreads.7:833
6658 #, no-wrap
6659 msgid "-"
6660 msgstr ""
6661
6662 #. type: Plain text
6663 #: build/C/man7/pthreads.7:39
6664 msgid "process ID"
6665 msgstr ""
6666
6667 #. type: Plain text
6668 #: build/C/man7/pthreads.7:41
6669 msgid "parent process ID"
6670 msgstr ""
6671
6672 #. type: Plain text
6673 #: build/C/man7/pthreads.7:43
6674 msgid "process group ID and session ID"
6675 msgstr ""
6676
6677 #. type: Plain text
6678 #: build/C/man7/pthreads.7:45
6679 msgid "controlling terminal"
6680 msgstr ""
6681
6682 #. type: Plain text
6683 #: build/C/man7/pthreads.7:47
6684 msgid "user and group IDs"
6685 msgstr ""
6686
6687 #. type: Plain text
6688 #: build/C/man7/pthreads.7:49
6689 msgid "open file descriptors"
6690 msgstr ""
6691
6692 #. type: Plain text
6693 #: build/C/man7/pthreads.7:52
6694 msgid "record locks (see B<fcntl>(2))"
6695 msgstr ""
6696
6697 #. type: Plain text
6698 #: build/C/man7/pthreads.7:54
6699 msgid "signal dispositions"
6700 msgstr ""
6701
6702 #. type: Plain text
6703 #: build/C/man7/pthreads.7:57
6704 msgid "file mode creation mask (B<umask>(2))"
6705 msgstr ""
6706
6707 #. type: Plain text
6708 #: build/C/man7/pthreads.7:63
6709 msgid "current directory (B<chdir>(2))  and root directory (B<chroot>(2))"
6710 msgstr ""
6711
6712 #. type: Plain text
6713 #: build/C/man7/pthreads.7:68
6714 msgid "interval timers (B<setitimer>(2))  and POSIX timers (B<timer_create>(2))"
6715 msgstr ""
6716
6717 #. type: Plain text
6718 #: build/C/man7/pthreads.7:71
6719 msgid "nice value (B<setpriority>(2))"
6720 msgstr ""
6721
6722 #. type: Plain text
6723 #: build/C/man7/pthreads.7:74
6724 msgid "resource limits (B<setrlimit>(2))"
6725 msgstr ""
6726
6727 #. type: Plain text
6728 #: build/C/man7/pthreads.7:79
6729 msgid ""
6730 "measurements of the consumption of CPU time (B<times>(2))  and resources "
6731 "(B<getrusage>(2))"
6732 msgstr ""
6733
6734 #. type: Plain text
6735 #: build/C/man7/pthreads.7:82
6736 msgid ""
6737 "As well as the stack, POSIX.1 specifies that various other attributes are "
6738 "distinct for each thread, including:"
6739 msgstr ""
6740
6741 #. type: Plain text
6742 #: build/C/man7/pthreads.7:86
6743 msgid "thread ID (the I<pthread_t> data type)"
6744 msgstr ""
6745
6746 #. type: Plain text
6747 #: build/C/man7/pthreads.7:89
6748 msgid "signal mask (B<pthread_sigmask>(3))"
6749 msgstr ""
6750
6751 #. type: Plain text
6752 #: build/C/man7/pthreads.7:93
6753 msgid "the I<errno> variable"
6754 msgstr ""
6755
6756 #. type: Plain text
6757 #: build/C/man7/pthreads.7:96
6758 msgid "alternate signal stack (B<sigaltstack>(2))"
6759 msgstr ""
6760
6761 #. type: Plain text
6762 #: build/C/man7/pthreads.7:101
6763 msgid ""
6764 "real-time scheduling policy and priority (B<sched_setscheduler>(2)  and "
6765 "B<sched_setparam>(2))"
6766 msgstr ""
6767
6768 #. type: Plain text
6769 #: build/C/man7/pthreads.7:103
6770 msgid "The following Linux-specific features are also per-thread:"
6771 msgstr ""
6772
6773 #. type: Plain text
6774 #: build/C/man7/pthreads.7:106
6775 msgid "capabilities (see B<capabilities>(7))"
6776 msgstr ""
6777
6778 #. type: Plain text
6779 #: build/C/man7/pthreads.7:109
6780 msgid "CPU affinity (B<sched_setaffinity>(2))"
6781 msgstr ""
6782
6783 #. type: SS
6784 #: build/C/man7/pthreads.7:109
6785 #, no-wrap
6786 msgid "Pthreads function return values"
6787 msgstr ""
6788
6789 #. type: Plain text
6790 #: build/C/man7/pthreads.7:116
6791 msgid ""
6792 "Most pthreads functions return 0 on success, and an error number of "
6793 "failure.  Note that the pthreads functions do not set I<errno>.  For each of "
6794 "the pthreads functions that can return an error, POSIX.1-2001 specifies that "
6795 "the function can never fail with the error B<EINTR>."
6796 msgstr ""
6797
6798 #. type: SS
6799 #: build/C/man7/pthreads.7:116
6800 #, no-wrap
6801 msgid "Thread IDs"
6802 msgstr ""
6803
6804 #. type: Plain text
6805 #: build/C/man7/pthreads.7:130
6806 msgid ""
6807 "Each of the threads in a process has a unique thread identifier (stored in "
6808 "the type I<pthread_t>).  This identifier is returned to the caller of "
6809 "B<pthread_create>(3), and a thread can obtain its own thread identifier "
6810 "using B<pthread_self>(3).  Thread IDs are only guaranteed to be unique "
6811 "within a process.  A thread ID may be reused after a terminated thread has "
6812 "been joined, or a detached thread has terminated.  In all pthreads functions "
6813 "that accept a thread ID as an argument, that ID by definition refers to a "
6814 "thread in the same process as the caller."
6815 msgstr ""
6816
6817 #. type: SS
6818 #: build/C/man7/pthreads.7:130
6819 #, no-wrap
6820 msgid "Thread-safe functions"
6821 msgstr ""
6822
6823 #. type: Plain text
6824 #: build/C/man7/pthreads.7:134
6825 msgid ""
6826 "A thread-safe function is one that can be safely (i.e., it will deliver the "
6827 "same results regardless of whether it is)  called from multiple threads at "
6828 "the same time."
6829 msgstr ""
6830
6831 #. type: Plain text
6832 #: build/C/man7/pthreads.7:138
6833 msgid ""
6834 "POSIX.1-2001 and POSIX.1-2008 require that all functions specified in the "
6835 "standard shall be thread-safe, except for the following functions:"
6836 msgstr ""
6837
6838 #. type: Plain text
6839 #: build/C/man7/pthreads.7:232
6840 #, no-wrap
6841 msgid ""
6842 "asctime()\n"
6843 "basename()\n"
6844 "catgets()\n"
6845 "crypt()\n"
6846 "ctermid() if passed a non-NULL argument\n"
6847 "ctime()\n"
6848 "dbm_clearerr()\n"
6849 "dbm_close()\n"
6850 "dbm_delete()\n"
6851 "dbm_error()\n"
6852 "dbm_fetch()\n"
6853 "dbm_firstkey()\n"
6854 "dbm_nextkey()\n"
6855 "dbm_open()\n"
6856 "dbm_store()\n"
6857 "dirname()\n"
6858 "dlerror()\n"
6859 "drand48()\n"
6860 "ecvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]\n"
6861 "encrypt()\n"
6862 "endgrent()\n"
6863 "endpwent()\n"
6864 "endutxent()\n"
6865 "fcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]\n"
6866 "ftw()\n"
6867 "gcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]\n"
6868 "getc_unlocked()\n"
6869 "getchar_unlocked()\n"
6870 "getdate()\n"
6871 "getenv()\n"
6872 "getgrent()\n"
6873 "getgrgid()\n"
6874 "getgrnam()\n"
6875 "gethostbyaddr() [POSIX.1-2001 only (function removed in POSIX.1-2008)]\n"
6876 "gethostbyname() [POSIX.1-2001 only (function removed in POSIX.1-2008)]\n"
6877 "gethostent()\n"
6878 "getlogin()\n"
6879 "getnetbyaddr()\n"
6880 "getnetbyname()\n"
6881 "getnetent()\n"
6882 "getopt()\n"
6883 "getprotobyname()\n"
6884 "getprotobynumber()\n"
6885 "getprotoent()\n"
6886 "getpwent()\n"
6887 "getpwnam()\n"
6888 "getpwuid()\n"
6889 "getservbyname()\n"
6890 "getservbyport()\n"
6891 "getservent()\n"
6892 "getutxent()\n"
6893 "getutxid()\n"
6894 "getutxline()\n"
6895 "gmtime()\n"
6896 "hcreate()\n"
6897 "hdestroy()\n"
6898 "hsearch()\n"
6899 "inet_ntoa()\n"
6900 "l64a()\n"
6901 "lgamma()\n"
6902 "lgammaf()\n"
6903 "lgammal()\n"
6904 "localeconv()\n"
6905 "localtime()\n"
6906 "lrand48()\n"
6907 "mrand48()\n"
6908 "nftw()\n"
6909 "nl_langinfo()\n"
6910 "ptsname()\n"
6911 "putc_unlocked()\n"
6912 "putchar_unlocked()\n"
6913 "putenv()\n"
6914 "pututxline()\n"
6915 "rand()\n"
6916 "readdir()\n"
6917 "setenv()\n"
6918 "setgrent()\n"
6919 "setkey()\n"
6920 "setpwent()\n"
6921 "setutxent()\n"
6922 "strerror()\n"
6923 "strsignal() [Added in POSIX.1-2008]\n"
6924 "strtok()\n"
6925 "system() [Added in POSIX.1-2008]\n"
6926 "tmpnam() if passed a non-NULL argument\n"
6927 "ttyname()\n"
6928 "unsetenv()\n"
6929 "wcrtomb() if its final argument is NULL\n"
6930 "wcsrtombs() if its final argument is NULL\n"
6931 "wcstombs()\n"
6932 "wctomb()\n"
6933 msgstr ""
6934
6935 #. type: SS
6936 #: build/C/man7/pthreads.7:234
6937 #, no-wrap
6938 msgid "Async-cancel-safe functions"
6939 msgstr ""
6940
6941 #. type: Plain text
6942 #: build/C/man7/pthreads.7:238
6943 msgid ""
6944 "An async-cancel-safe function is one that can be safely called in an "
6945 "application where asynchronous cancelability is enabled (see "
6946 "B<pthread_setcancelstate>(3))."
6947 msgstr ""
6948
6949 #. type: Plain text
6950 #: build/C/man7/pthreads.7:241
6951 msgid ""
6952 "Only the following functions are required to be async-cancel-safe by "
6953 "POSIX.1-2001 and POSIX.1-2008:"
6954 msgstr ""
6955
6956 #. type: Plain text
6957 #: build/C/man7/pthreads.7:247
6958 #, no-wrap
6959 msgid ""
6960 "pthread_cancel()\n"
6961 "pthread_setcancelstate()\n"
6962 "pthread_setcanceltype()\n"
6963 msgstr ""
6964
6965 #. type: SS
6966 #: build/C/man7/pthreads.7:249
6967 #, no-wrap
6968 msgid "Cancellation Points"
6969 msgstr ""
6970
6971 #. type: Plain text
6972 #: build/C/man7/pthreads.7:256
6973 msgid ""
6974 "POSIX.1 specifies that certain functions must, and certain other functions "
6975 "may, be cancellation points.  If a thread is cancelable, its cancelability "
6976 "type is deferred, and a cancellation request is pending for the thread, then "
6977 "the thread is canceled when it calls a function that is a cancellation "
6978 "point."
6979 msgstr ""
6980
6981 #. type: Plain text
6982 #: build/C/man7/pthreads.7:259
6983 msgid ""
6984 "The following functions are required to be cancellation points by "
6985 "POSIX.1-2001 and/or POSIX.1-2008:"
6986 msgstr ""
6987
6988 #. type: Plain text
6989 #: build/C/man7/pthreads.7:322
6990 #, no-wrap
6991 msgid ""
6992 "accept()\n"
6993 "aio_suspend()\n"
6994 "clock_nanosleep()\n"
6995 "close()\n"
6996 "connect()\n"
6997 "creat()\n"
6998 "fcntl() F_SETLKW\n"
6999 "fdatasync()\n"
7000 "fsync()\n"
7001 "getmsg()\n"
7002 "getpmsg()\n"
7003 "lockf() F_LOCK\n"
7004 "mq_receive()\n"
7005 "mq_send()\n"
7006 "mq_timedreceive()\n"
7007 "mq_timedsend()\n"
7008 "msgrcv()\n"
7009 "msgsnd()\n"
7010 "msync()\n"
7011 "nanosleep()\n"
7012 "open()\n"
7013 "openat() [Added in POSIX.1-2008]\n"
7014 "pause()\n"
7015 "poll()\n"
7016 "pread()\n"
7017 "pselect()\n"
7018 "pthread_cond_timedwait()\n"
7019 "pthread_cond_wait()\n"
7020 "pthread_join()\n"
7021 "pthread_testcancel()\n"
7022 "putmsg()\n"
7023 "putpmsg()\n"
7024 "pwrite()\n"
7025 "read()\n"
7026 "readv()\n"
7027 "recv()\n"
7028 "recvfrom()\n"
7029 "recvmsg()\n"
7030 "select()\n"
7031 "sem_timedwait()\n"
7032 "sem_wait()\n"
7033 "send()\n"
7034 "sendmsg()\n"
7035 "sendto()\n"
7036 "sigpause() [POSIX.1-2001 only (moves to \"may\" list in POSIX.1-2008)]\n"
7037 "sigsuspend()\n"
7038 "sigtimedwait()\n"
7039 "sigwait()\n"
7040 "sigwaitinfo()\n"
7041 "sleep()\n"
7042 "system()\n"
7043 "tcdrain()\n"
7044 "usleep() [POSIX.1-2001 only (function removed in POSIX.1-2008)]\n"
7045 "wait()\n"
7046 "waitid()\n"
7047 "waitpid()\n"
7048 "write()\n"
7049 "writev()\n"
7050 msgstr ""
7051
7052 #. type: Plain text
7053 #: build/C/man7/pthreads.7:327
7054 msgid ""
7055 "The following functions may be cancellation points according to POSIX.1-2001 "
7056 "and/or POSIX.1-2008:"
7057 msgstr ""
7058
7059 #. type: Plain text
7060 #: build/C/man7/pthreads.7:555
7061 #, no-wrap
7062 msgid ""
7063 "access()\n"
7064 "asctime()\n"
7065 "asctime_r()\n"
7066 "catclose()\n"
7067 "catgets()\n"
7068 "catopen()\n"
7069 "chmod() [Added in POSIX.1-2008]\n"
7070 "chown() [Added in POSIX.1-2008]\n"
7071 "closedir()\n"
7072 "closelog()\n"
7073 "ctermid()\n"
7074 "ctime()\n"
7075 "ctime_r()\n"
7076 "dbm_close()\n"
7077 "dbm_delete()\n"
7078 "dbm_fetch()\n"
7079 "dbm_nextkey()\n"
7080 "dbm_open()\n"
7081 "dbm_store()\n"
7082 "dlclose()\n"
7083 "dlopen()\n"
7084 "dprintf() [Added in POSIX.1-2008]\n"
7085 "endgrent()\n"
7086 "endhostent()\n"
7087 "endnetent()\n"
7088 "endprotoent()\n"
7089 "endpwent()\n"
7090 "endservent()\n"
7091 "endutxent()\n"
7092 "faccessat() [Added in POSIX.1-2008]\n"
7093 "fchmod() [Added in POSIX.1-2008]\n"
7094 "fchmodat() [Added in POSIX.1-2008]\n"
7095 "fchown() [Added in POSIX.1-2008]\n"
7096 "fchownat() [Added in POSIX.1-2008]\n"
7097 "fclose()\n"
7098 "fcntl() (for any value of cmd argument)\n"
7099 "fflush()\n"
7100 "fgetc()\n"
7101 "fgetpos()\n"
7102 "fgets()\n"
7103 "fgetwc()\n"
7104 "fgetws()\n"
7105 "fmtmsg()\n"
7106 "fopen()\n"
7107 "fpathconf()\n"
7108 "fprintf()\n"
7109 "fputc()\n"
7110 "fputs()\n"
7111 "fputwc()\n"
7112 "fputws()\n"
7113 "fread()\n"
7114 "freopen()\n"
7115 "fscanf()\n"
7116 "fseek()\n"
7117 "fseeko()\n"
7118 "fsetpos()\n"
7119 "fstat()\n"
7120 "fstatat() [Added in POSIX.1-2008]\n"
7121 "ftell()\n"
7122 "ftello()\n"
7123 "ftw()\n"
7124 "futimens() [Added in POSIX.1-2008]\n"
7125 "fwprintf()\n"
7126 "fwrite()\n"
7127 "fwscanf()\n"
7128 "getaddrinfo()\n"
7129 "getc()\n"
7130 "getc_unlocked()\n"
7131 "getchar()\n"
7132 "getchar_unlocked()\n"
7133 "getcwd()\n"
7134 "getdate()\n"
7135 "getdelim() [Added in POSIX.1-2008]\n"
7136 "getgrent()\n"
7137 "getgrgid()\n"
7138 "getgrgid_r()\n"
7139 "getgrnam()\n"
7140 "getgrnam_r()\n"
7141 "gethostbyaddr() [SUSv3 only (function removed in POSIX.1-2008)]\n"
7142 "gethostbyname() [SUSv3 only (function removed in POSIX.1-2008)]\n"
7143 "gethostent()\n"
7144 "gethostid()\n"
7145 "gethostname()\n"
7146 "getline() [Added in POSIX.1-2008]\n"
7147 "getlogin()\n"
7148 "getlogin_r()\n"
7149 "getnameinfo()\n"
7150 "getnetbyaddr()\n"
7151 "getnetbyname()\n"
7152 "getnetent()\n"
7153 "getopt() (if opterr is nonzero)\n"
7154 "getprotobyname()\n"
7155 "getprotobynumber()\n"
7156 "getprotoent()\n"
7157 "getpwent()\n"
7158 "getpwnam()\n"
7159 "getpwnam_r()\n"
7160 "getpwuid()\n"
7161 "getpwuid_r()\n"
7162 "gets()\n"
7163 "getservbyname()\n"
7164 "getservbyport()\n"
7165 "getservent()\n"
7166 "getutxent()\n"
7167 "getutxid()\n"
7168 "getutxline()\n"
7169 "getwc()\n"
7170 "getwchar()\n"
7171 "getwd() [SUSv3 only (function removed in POSIX.1-2008)]\n"
7172 "glob()\n"
7173 "iconv_close()\n"
7174 "iconv_open()\n"
7175 "ioctl()\n"
7176 "link()\n"
7177 "linkat() [Added in POSIX.1-2008]\n"
7178 "lio_listio() [Added in POSIX.1-2008]\n"
7179 "localtime()\n"
7180 "localtime_r()\n"
7181 "lockf() [Added in POSIX.1-2008]\n"
7182 "lseek()\n"
7183 "lstat()\n"
7184 "mkdir() [Added in POSIX.1-2008]\n"
7185 "mkdirat() [Added in POSIX.1-2008]\n"
7186 "mkdtemp() [Added in POSIX.1-2008]\n"
7187 "mkfifo() [Added in POSIX.1-2008]\n"
7188 "mkfifoat() [Added in POSIX.1-2008]\n"
7189 "mknod() [Added in POSIX.1-2008]\n"
7190 "mknodat() [Added in POSIX.1-2008]\n"
7191 "mkstemp()\n"
7192 "mktime()\n"
7193 "nftw()\n"
7194 "opendir()\n"
7195 "openlog()\n"
7196 "pathconf()\n"
7197 "pclose()\n"
7198 "perror()\n"
7199 "popen()\n"
7200 "posix_fadvise()\n"
7201 "posix_fallocate()\n"
7202 "posix_madvise()\n"
7203 "posix_openpt()\n"
7204 "posix_spawn()\n"
7205 "posix_spawnp()\n"
7206 "posix_trace_clear()\n"
7207 "posix_trace_close()\n"
7208 "posix_trace_create()\n"
7209 "posix_trace_create_withlog()\n"
7210 "posix_trace_eventtypelist_getnext_id()\n"
7211 "posix_trace_eventtypelist_rewind()\n"
7212 "posix_trace_flush()\n"
7213 "posix_trace_get_attr()\n"
7214 "posix_trace_get_filter()\n"
7215 "posix_trace_get_status()\n"
7216 "posix_trace_getnext_event()\n"
7217 "posix_trace_open()\n"
7218 "posix_trace_rewind()\n"
7219 "posix_trace_set_filter()\n"
7220 "posix_trace_shutdown()\n"
7221 "posix_trace_timedgetnext_event()\n"
7222 "posix_typed_mem_open()\n"
7223 "printf()\n"
7224 "psiginfo() [Added in POSIX.1-2008]\n"
7225 "psignal() [Added in POSIX.1-2008]\n"
7226 "pthread_rwlock_rdlock()\n"
7227 "pthread_rwlock_timedrdlock()\n"
7228 "pthread_rwlock_timedwrlock()\n"
7229 "pthread_rwlock_wrlock()\n"
7230 "putc()\n"
7231 "putc_unlocked()\n"
7232 "putchar()\n"
7233 "putchar_unlocked()\n"
7234 "puts()\n"
7235 "pututxline()\n"
7236 "putwc()\n"
7237 "putwchar()\n"
7238 "readdir()\n"
7239 "readdir_r()\n"
7240 "readlink() [Added in POSIX.1-2008]\n"
7241 "readlinkat() [Added in POSIX.1-2008]\n"
7242 "remove()\n"
7243 "rename()\n"
7244 "renameat() [Added in POSIX.1-2008]\n"
7245 "rewind()\n"
7246 "rewinddir()\n"
7247 "scandir() [Added in POSIX.1-2008]\n"
7248 "scanf()\n"
7249 "seekdir()\n"
7250 "semop()\n"
7251 "setgrent()\n"
7252 "sethostent()\n"
7253 "setnetent()\n"
7254 "setprotoent()\n"
7255 "setpwent()\n"
7256 "setservent()\n"
7257 "setutxent()\n"
7258 "sigpause() [Added in POSIX.1-2008]\n"
7259 "stat()\n"
7260 "strerror()\n"
7261 "strerror_r()\n"
7262 "strftime()\n"
7263 "symlink()\n"
7264 "symlinkat() [Added in POSIX.1-2008]\n"
7265 "sync()\n"
7266 "syslog()\n"
7267 "tmpfile()\n"
7268 "tmpnam()\n"
7269 "ttyname()\n"
7270 "ttyname_r()\n"
7271 "tzset()\n"
7272 "ungetc()\n"
7273 "ungetwc()\n"
7274 "unlink()\n"
7275 "unlinkat() [Added in POSIX.1-2008]\n"
7276 "utime() [Added in POSIX.1-2008]\n"
7277 "utimensat() [Added in POSIX.1-2008]\n"
7278 "utimes() [Added in POSIX.1-2008]\n"
7279 "vdprintf() [Added in POSIX.1-2008]\n"
7280 "vfprintf()\n"
7281 "vfwprintf()\n"
7282 "vprintf()\n"
7283 "vwprintf()\n"
7284 "wcsftime()\n"
7285 "wordexp()\n"
7286 "wprintf()\n"
7287 "wscanf()\n"
7288 msgstr ""
7289
7290 #.  So, scanning "cancellation point" comments in the glibc 2.8 header
7291 #.  files, it looks as though at least the following nonstandard
7292 #.  functions are cancellation points:
7293 #.  endnetgrent
7294 #.  endspent
7295 #.  epoll_pwait
7296 #.  epoll_wait
7297 #.  fcloseall
7298 #.  fdopendir
7299 #.  fflush_unlocked
7300 #.  fgetc_unlocked
7301 #.  fgetgrent
7302 #.  fgetgrent_r
7303 #.  fgetpwent
7304 #.  fgetpwent_r
7305 #.  fgets_unlocked
7306 #.  fgetspent
7307 #.  fgetspent_r
7308 #.  fgetwc_unlocked
7309 #.  fgetws_unlocked
7310 #.  fputc_unlocked
7311 #.  fputs_unlocked
7312 #.  fputwc_unlocked
7313 #.  fputws_unlocked
7314 #.  fread_unlocked
7315 #.  fwrite_unlocked
7316 #.  gai_suspend
7317 #.  getaddrinfo_a
7318 #.  getdate_r
7319 #.  getgrent_r
7320 #.  getgrouplist
7321 #.  gethostbyaddr_r
7322 #.  gethostbyname2
7323 #.  gethostbyname2_r
7324 #.  gethostbyname_r
7325 #.  gethostent_r
7326 #.  getnetbyaddr_r
7327 #.  getnetbyname_r
7328 #.  getnetent_r
7329 #.  getnetgrent
7330 #.  getnetgrent_r
7331 #.  getprotobyname_r
7332 #.  getprotobynumber_r
7333 #.  getprotoent_r
7334 #.  getpw
7335 #.  getpwent_r
7336 #.  getservbyname_r
7337 #.  getservbyport_r
7338 #.  getservent_r
7339 #.  getspent
7340 #.  getspent_r
7341 #.  getspnam
7342 #.  getspnam_r
7343 #.  getutmp
7344 #.  getutmpx
7345 #.  getw
7346 #.  getwc_unlocked
7347 #.  getwchar_unlocked
7348 #.  initgroups
7349 #.  innetgr
7350 #.  mkostemp
7351 #.  mkostemp64
7352 #.  mkstemp64
7353 #.  ppoll
7354 #.  pthread_timedjoin_np
7355 #.  putgrent
7356 #.  putpwent
7357 #.  putspent
7358 #.  putw
7359 #.  putwc_unlocked
7360 #.  putwchar_unlocked
7361 #.  rcmd
7362 #.  rcmd_af
7363 #.  rexec
7364 #.  rexec_af
7365 #.  rresvport
7366 #.  rresvport_af
7367 #.  ruserok
7368 #.  ruserok_af
7369 #.  setnetgrent
7370 #.  setspent
7371 #.  sgetspent
7372 #.  sgetspent_r
7373 #.  updwtmpx
7374 #.  utmpxname
7375 #.  vfscanf
7376 #.  vfwscanf
7377 #.  vscanf
7378 #.  vsyslog
7379 #.  vwscanf
7380 #. type: Plain text
7381 #: build/C/man7/pthreads.7:653
7382 msgid ""
7383 "An implementation may also mark other functions not specified in the "
7384 "standard as cancellation points.  In particular, an implementation is likely "
7385 "to mark any nonstandard function that may block as a cancellation point.  "
7386 "(This includes most functions that can touch files.)"
7387 msgstr ""
7388
7389 #. type: SS
7390 #: build/C/man7/pthreads.7:653
7391 #, no-wrap
7392 msgid "Compiling on Linux"
7393 msgstr ""
7394
7395 #. type: Plain text
7396 #: build/C/man7/pthreads.7:656
7397 msgid ""
7398 "On Linux, programs that use the Pthreads API should be compiled using I<cc "
7399 "-pthread>."
7400 msgstr ""
7401
7402 #. type: SS
7403 #: build/C/man7/pthreads.7:656
7404 #, no-wrap
7405 msgid "Linux Implementations of POSIX Threads"
7406 msgstr ""
7407
7408 #. type: Plain text
7409 #: build/C/man7/pthreads.7:659
7410 msgid ""
7411 "Over time, two threading implementations have been provided by the GNU C "
7412 "library on Linux:"
7413 msgstr ""
7414
7415 #. type: TP
7416 #: build/C/man7/pthreads.7:659
7417 #, no-wrap
7418 msgid "B<LinuxThreads>"
7419 msgstr ""
7420
7421 #. type: Plain text
7422 #: build/C/man7/pthreads.7:663
7423 msgid ""
7424 "This is the original Pthreads implementation.  Since glibc 2.4, this "
7425 "implementation is no longer supported."
7426 msgstr ""
7427
7428 #. type: TP
7429 #: build/C/man7/pthreads.7:663
7430 #, no-wrap
7431 msgid "B<NPTL> (Native POSIX Threads Library)"
7432 msgstr ""
7433
7434 #. type: Plain text
7435 #: build/C/man7/pthreads.7:671
7436 msgid ""
7437 "This is the modern Pthreads implementation.  By comparison with "
7438 "LinuxThreads, NPTL provides closer conformance to the requirements of the "
7439 "POSIX.1 specification and better performance when creating large numbers of "
7440 "threads.  NPTL is available since glibc 2.3.2, and requires features that "
7441 "are present in the Linux 2.6 kernel."
7442 msgstr ""
7443
7444 #. type: Plain text
7445 #: build/C/man7/pthreads.7:681
7446 msgid ""
7447 "Both of these are so-called 1:1 implementations, meaning that each thread "
7448 "maps to a kernel scheduling entity.  Both threading implementations employ "
7449 "the Linux B<clone>(2)  system call.  In NPTL, thread synchronization "
7450 "primitives (mutexes, thread joining, etc.) are implemented using the Linux "
7451 "B<futex>(2)  system call."
7452 msgstr ""
7453
7454 #. type: SS
7455 #: build/C/man7/pthreads.7:681
7456 #, no-wrap
7457 msgid "LinuxThreads"
7458 msgstr ""
7459
7460 #. type: Plain text
7461 #: build/C/man7/pthreads.7:683
7462 msgid "The notable features of this implementation are the following:"
7463 msgstr ""
7464
7465 #. type: Plain text
7466 #: build/C/man7/pthreads.7:690
7467 msgid ""
7468 "In addition to the main (initial) thread, and the threads that the program "
7469 "creates using B<pthread_create>(3), the implementation creates a \"manager\" "
7470 "thread.  This thread handles thread creation and termination.  (Problems can "
7471 "result if this thread is inadvertently killed.)"
7472 msgstr ""
7473
7474 #. type: Plain text
7475 #: build/C/man7/pthreads.7:702
7476 msgid ""
7477 "Signals are used internally by the implementation.  On Linux 2.2 and later, "
7478 "the first three real-time signals are used (see also B<signal>(7)).  On "
7479 "older Linux kernels, B<SIGUSR1> and B<SIGUSR2> are used.  Applications must "
7480 "avoid the use of whichever set of signals is employed by the implementation."
7481 msgstr ""
7482
7483 #. type: Plain text
7484 #: build/C/man7/pthreads.7:709
7485 msgid ""
7486 "Threads do not share process IDs.  (In effect, LinuxThreads threads are "
7487 "implemented as processes which share more information than usual, but which "
7488 "do not share a common process ID.)  LinuxThreads threads (including the "
7489 "manager thread)  are visible as separate processes using B<ps>(1)."
7490 msgstr ""
7491
7492 #. type: Plain text
7493 #: build/C/man7/pthreads.7:712
7494 msgid ""
7495 "The LinuxThreads implementation deviates from the POSIX.1 specification in a "
7496 "number of ways, including the following:"
7497 msgstr ""
7498
7499 #. type: Plain text
7500 #: build/C/man7/pthreads.7:716
7501 msgid "Calls to B<getpid>(2)  return a different value in each thread."
7502 msgstr ""
7503
7504 #. type: Plain text
7505 #: build/C/man7/pthreads.7:725
7506 msgid ""
7507 "Calls to B<getppid>(2)  in threads other than the main thread return the "
7508 "process ID of the manager thread; instead B<getppid>(2)  in these threads "
7509 "should return the same value as B<getppid>(2)  in the main thread."
7510 msgstr ""
7511
7512 #. type: Plain text
7513 #: build/C/man7/pthreads.7:735
7514 msgid ""
7515 "When one thread creates a new child process using B<fork>(2), any thread "
7516 "should be able to B<wait>(2)  on the child.  However, the implementation "
7517 "only allows the thread that created the child to B<wait>(2)  on it."
7518 msgstr ""
7519
7520 #. type: Plain text
7521 #: build/C/man7/pthreads.7:742
7522 msgid ""
7523 "When a thread calls B<execve>(2), all other threads are terminated (as "
7524 "required by POSIX.1).  However, the resulting process has the same PID as "
7525 "the thread that called B<execve>(2): it should have the same PID as the main "
7526 "thread."
7527 msgstr ""
7528
7529 #. type: Plain text
7530 #: build/C/man7/pthreads.7:749
7531 msgid ""
7532 "Threads do not share user and group IDs.  This can cause complications with "
7533 "set-user-ID programs and can cause failures in Pthreads functions if an "
7534 "application changes its credentials using B<seteuid>(2)  or similar."
7535 msgstr ""
7536
7537 #. type: Plain text
7538 #: build/C/man7/pthreads.7:751
7539 msgid "Threads do not share a common session ID and process group ID."
7540 msgstr ""
7541
7542 #. type: Plain text
7543 #: build/C/man7/pthreads.7:754
7544 msgid "Threads do not share record locks created using B<fcntl>(2)."
7545 msgstr ""
7546
7547 #. type: Plain text
7548 #: build/C/man7/pthreads.7:760
7549 msgid ""
7550 "The information returned by B<times>(2)  and B<getrusage>(2)  is per-thread "
7551 "rather than process-wide."
7552 msgstr ""
7553
7554 #. type: Plain text
7555 #: build/C/man7/pthreads.7:763
7556 msgid "Threads do not share semaphore undo values (see B<semop>(2))."
7557 msgstr ""
7558
7559 #. type: Plain text
7560 #: build/C/man7/pthreads.7:765
7561 msgid "Threads do not share interval timers."
7562 msgstr ""
7563
7564 #.  FIXME . bug report filed for NPTL nice nonconformance
7565 #.  http://bugzilla.kernel.org/show_bug.cgi?id=6258
7566 #.  Sep 08: there is a patch by Denys Vlasenko to address this
7567 #.  "make setpriority POSIX compliant; introduce PRIO_THREAD extension"
7568 #.  Monitor this to see if it makes it into mainline.
7569 #. type: Plain text
7570 #: build/C/man7/pthreads.7:767 build/C/man7/pthreads.7:804
7571 msgid "Threads do not share a common nice value."
7572 msgstr ""
7573
7574 #. type: Plain text
7575 #: build/C/man7/pthreads.7:777
7576 msgid ""
7577 "POSIX.1 distinguishes the notions of signals that are directed to the "
7578 "process as a whole and signals that are directed to individual threads.  "
7579 "According to POSIX.1, a process-directed signal (sent using B<kill>(2), for "
7580 "example) should be handled by a single, arbitrarily selected thread within "
7581 "the process.  LinuxThreads does not support the notion of process-directed "
7582 "signals: signals may only be sent to specific threads."
7583 msgstr ""
7584
7585 #. type: Plain text
7586 #: build/C/man7/pthreads.7:786
7587 msgid ""
7588 "Threads have distinct alternate signal stack settings.  However, a new "
7589 "thread's alternate signal stack settings are copied from the thread that "
7590 "created it, so that the threads initially share an alternate signal stack.  "
7591 "(A new thread should start with no alternate signal stack defined.  If two "
7592 "threads handle signals on their shared alternate signal stack at the same "
7593 "time, unpredictable program failures are likely to occur.)"
7594 msgstr ""
7595
7596 #. type: SS
7597 #: build/C/man7/pthreads.7:786
7598 #, no-wrap
7599 msgid "NPTL"
7600 msgstr ""
7601
7602 #. type: Plain text
7603 #: build/C/man7/pthreads.7:795
7604 msgid ""
7605 "With NPTL, all of the threads in a process are placed in the same thread "
7606 "group; all members of a thread group share the same PID.  NPTL does not "
7607 "employ a manager thread.  NPTL makes internal use of the first two real-time "
7608 "signals (see also B<signal>(7)); these signals cannot be used in "
7609 "applications."
7610 msgstr ""
7611
7612 #. type: Plain text
7613 #: build/C/man7/pthreads.7:797
7614 msgid "NPTL still has at least one nonconformance with POSIX.1:"
7615 msgstr ""
7616
7617 #. type: Plain text
7618 #: build/C/man7/pthreads.7:806
7619 msgid "Some NPTL nonconformances only occur with older kernels:"
7620 msgstr ""
7621
7622 #. type: Plain text
7623 #: build/C/man7/pthreads.7:812
7624 msgid ""
7625 "The information returned by B<times>(2)  and B<getrusage>(2)  is per-thread "
7626 "rather than process-wide (fixed in kernel 2.6.9)."
7627 msgstr ""
7628
7629 #. type: Plain text
7630 #: build/C/man7/pthreads.7:814
7631 msgid "Threads do not share resource limits (fixed in kernel 2.6.10)."
7632 msgstr ""
7633
7634 #. type: Plain text
7635 #: build/C/man7/pthreads.7:816
7636 msgid "Threads do not share interval timers (fixed in kernel 2.6.12)."
7637 msgstr ""
7638
7639 #. type: Plain text
7640 #: build/C/man7/pthreads.7:820
7641 msgid ""
7642 "Only the main thread is permitted to start a new session using B<setsid>(2)  "
7643 "(fixed in kernel 2.6.16)."
7644 msgstr ""
7645
7646 #. type: Plain text
7647 #: build/C/man7/pthreads.7:825
7648 msgid ""
7649 "Only the main thread is permitted to make the process into a process group "
7650 "leader using B<setpgid>(2)  (fixed in kernel 2.6.16)."
7651 msgstr ""
7652
7653 #. type: Plain text
7654 #: build/C/man7/pthreads.7:831
7655 msgid ""
7656 "Threads have distinct alternate signal stack settings.  However, a new "
7657 "thread's alternate signal stack settings are copied from the thread that "
7658 "created it, so that the threads initially share an alternate signal stack "
7659 "(fixed in kernel 2.6.16)."
7660 msgstr ""
7661
7662 #. type: Plain text
7663 #: build/C/man7/pthreads.7:833
7664 msgid "Note the following further points about the NPTL implementation:"
7665 msgstr ""
7666
7667 #. type: Plain text
7668 #: build/C/man7/pthreads.7:847
7669 msgid ""
7670 "If the stack size soft resource limit (see the description of "
7671 "B<RLIMIT_STACK> in B<setrlimit>(2))  is set to a value other than "
7672 "I<unlimited>, then this value defines the default stack size for new "
7673 "threads.  To be effective, this limit must be set before the program is "
7674 "executed, perhaps using the I<ulimit -s> shell built-in command (I<limit "
7675 "stacksize> in the C shell)."
7676 msgstr ""
7677
7678 #. type: SS
7679 #: build/C/man7/pthreads.7:847
7680 #, no-wrap
7681 msgid "Determining the Threading Implementation"
7682 msgstr ""
7683
7684 #. type: Plain text
7685 #: build/C/man7/pthreads.7:852
7686 msgid ""
7687 "Since glibc 2.3.2, the B<getconf>(1)  command can be used to determine the "
7688 "system's threading implementation, for example:"
7689 msgstr ""
7690
7691 #. type: Plain text
7692 #: build/C/man7/pthreads.7:857
7693 #, no-wrap
7694 msgid ""
7695 "bash$ getconf GNU_LIBPTHREAD_VERSION\n"
7696 "NPTL 2.3.4\n"
7697 msgstr ""
7698
7699 #. type: Plain text
7700 #: build/C/man7/pthreads.7:862
7701 msgid ""
7702 "With older glibc versions, a command such as the following should be "
7703 "sufficient to determine the default threading implementation:"
7704 msgstr ""
7705
7706 #. type: Plain text
7707 #: build/C/man7/pthreads.7:868
7708 #, no-wrap
7709 msgid ""
7710 "bash$ $( ldd /bin/ls | grep libc.so | awk \\(aq{print $3}\\(aq ) | \\e\n"
7711 "                egrep -i \\(aqthreads|nptl\\(aq\n"
7712 "        Native POSIX Threads Library by Ulrich Drepper et al\n"
7713 msgstr ""
7714
7715 #. type: SS
7716 #: build/C/man7/pthreads.7:870
7717 #, no-wrap
7718 msgid "Selecting the Threading Implementation: LD_ASSUME_KERNEL"
7719 msgstr ""
7720
7721 #. type: Plain text
7722 #: build/C/man7/pthreads.7:885
7723 msgid ""
7724 "On systems with a glibc that supports both LinuxThreads and NPTL (i.e., "
7725 "glibc 2.3.I<x>), the B<LD_ASSUME_KERNEL> environment variable can be used to "
7726 "override the dynamic linker's default choice of threading implementation.  "
7727 "This variable tells the dynamic linker to assume that it is running on top "
7728 "of a particular kernel version.  By specifying a kernel version that does "
7729 "not provide the support required by NPTL, we can force the use of "
7730 "LinuxThreads.  (The most likely reason for doing this is to run a (broken) "
7731 "application that depends on some nonconformant behavior in LinuxThreads.)  "
7732 "For example:"
7733 msgstr ""
7734
7735 #. type: Plain text
7736 #: build/C/man7/pthreads.7:891
7737 #, no-wrap
7738 msgid ""
7739 "bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \\e\n"
7740 "                awk \\(aq{print $3}\\(aq ) | egrep -i "
7741 "\\(aqthreads|ntpl\\(aq\n"
7742 "        linuxthreads-0.10 by Xavier Leroy\n"
7743 msgstr ""
7744
7745 #. type: Plain text
7746 #: build/C/man7/pthreads.7:903
7747 msgid ""
7748 "B<clone>(2), B<futex>(2), B<gettid>(2), B<proc>(5), B<futex>(7), "
7749 "B<sigevent>(7), B<signal>(7),"
7750 msgstr ""
7751
7752 #. type: Plain text
7753 #: build/C/man7/pthreads.7:927
7754 msgid ""
7755 "and various Pthreads manual pages, for example: B<pthread_attr_init>(3), "
7756 "B<pthread_atfork>(3), B<pthread_cancel>(3), B<pthread_cleanup_push>(3), "
7757 "B<pthread_cond_signal>(3), B<pthread_cond_wait>(3), B<pthread_create>(3), "
7758 "B<pthread_detach>(3), B<pthread_equal>(3), B<pthread_exit>(3), "
7759 "B<pthread_key_create>(3), B<pthread_kill>(3), B<pthread_mutex_lock>(3), "
7760 "B<pthread_mutex_unlock>(3), B<pthread_once>(3), "
7761 "B<pthread_setcancelstate>(3), B<pthread_setcanceltype>(3), "
7762 "B<pthread_setspecific>(3), B<pthread_sigmask>(3), B<pthread_sigqueue>(3), "
7763 "and B<pthread_testcancel>(3)"
7764 msgstr ""