天天看點

C++ Multithread Tutorial

---恢複内容開始---

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 &lt;iostream&gt;</code>

<code>#include &lt;cstdlib&gt;</code>

<code>#include &lt;pthread.h&gt;</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 &lt;&lt;</code><code>"hello world! thread id, "</code>

<code>&lt;&lt; tid &lt;&lt; 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 &lt; num_threads; i++ ){</code>

<code>      </code><code>cout &lt;&lt;</code><code>"main() : creating thread, "</code>

<code>&lt;&lt; i &lt;&lt; endl;</code>

<code>      </code><code>rc = pthread_create(&amp;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 &lt;&lt;</code><code>"error:unable to create thread,"</code>

<code>&lt;&lt; rc &lt;&lt; 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 &lt;&lt;</code><code>"thread id : "</code>

<code>&lt;&lt; my_data-&gt;thread_id &lt;&lt; endl;</code>

<code>    </code><code>cout &lt;&lt;</code><code>"message : "</code>

<code>&lt;&lt; my_data-&gt;message &lt;&lt; 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 &lt; num_thread; i ++)  {</code>

<code>        </code><code>cout &lt;&lt;</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(&amp;threads[i], null, printhello, (</code><code>void</code><code>*)&amp;td[i]);</code>

<code>        </code> 

<code>        </code><code>if</code><code>(rc)  {</code>

<code>            </code><code>cout &lt;&lt;</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

---恢複内容結束---