---恢複内容開始---
example 1
creating and terminating thread by using
pthread_create, pthread_exit(status)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<code>#include <iostream></code>
<code>#include <cstdlib></code>
<code>#include <pthread.h></code>
<code>using</code>
<code>namespace</code> <code>std;</code>
<code>#define num_threads 5</code>
<code>void</code> <code>*printhello(</code><code>void</code>
<code>*threadid)</code>
<code>{</code>
<code> </code><code>long</code>
<code>tid;</code>
<code> </code><code>tid = (</code><code>long</code><code>)threadid;</code>
<code> </code><code>cout <<</code><code>"hello world! thread id, "</code>
<code><< tid << endl;</code>
<code> </code><code>pthread_exit(null);</code>
<code>}</code>
<code>int</code>
<code>main ()</code>
<code> </code><code>pthread_t threads[num_threads];</code>
<code> </code><code>int</code>
<code>rc;</code>
<code>i;</code>
<code> </code><code>for</code><code>( i=0; i < num_threads; i++ ){</code>
<code> </code><code>cout <<</code><code>"main() : creating thread, "</code>
<code><< i << endl;</code>
<code> </code><code>rc = pthread_create(&threads[i], null,</code>
<code> </code><code>printhello, (</code><code>void</code>
<code>*)i);</code>
<code> </code><code>if</code>
<code>(rc){</code>
<code> </code><code>cout <<</code><code>"error:unable to create thread,"</code>
<code><< rc << endl;</code>
<code> </code><code>exit(-1);</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
compile it with g++ xxx.cpp -o test -lphread
example 2
passing arguments to threads
33
34
35
36
37
38
39
40
41
42
43
<code>#define num_thread 5</code>
<code>struct</code>
<code>thread_data {</code>
<code> </code><code>int</code>
<code>thread_id;</code>
<code> </code><code>char</code>
<code>*message;</code>
<code>};</code>
<code>void</code>
<code>*printhello(</code><code>void</code>
<code>*threadarg) {</code>
<code> </code><code>struct</code>
<code>thread_data *my_data;</code>
<code> </code><code>my_data = (</code><code>struct</code>
<code>thread_data*) threadarg;</code>
<code> </code><code>cout <<</code><code>"thread id : "</code>
<code><< my_data->thread_id << endl;</code>
<code> </code><code>cout <<</code><code>"message : "</code>
<code><< my_data->message << endl;</code>
<code> </code><code>pthread_exit(null);</code>
<code>main() {</code>
<code> </code><code>pthread_t threads[num_thread];</code>
<code>thread_data td[num_thread];</code>
<code> </code><code>for</code><code>(i = 0; i < num_thread; i ++) {</code>
<code> </code><code>cout <<</code><code>"main() : creating thread "</code>
<code> </code><code>td[i].thread_id = i;</code>
<code> </code><code>td[i].message =</code><code>"this is message"</code><code>;</code>
<code> </code><code>rc = pthread_create(&threads[i], null, printhello, (</code><code>void</code><code>*)&td[i]);</code>
<code> </code>
<code> </code><code>if</code><code>(rc) {</code>
<code> </code><code>cout <<</code><code>"error : unable to create thread "</code>
<code> </code><code>exit(-1);</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
example 3
joining and detaching thread
---恢複内容結束---