首页 > 代码库 > C++ Multithread Tutorial

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
#include <iostream>
#include <cstdlib>
#include <pthread.h>
 
using namespace std;
 
#define NUM_THREADS     5
 
void *PrintHello(void *threadid)
{
   long tid;
   tid = (long)threadid;
   cout << "Hello World! Thread ID, " << tid << endl;
   pthread_exit(NULL);
}
 
int main ()
{
   pthread_t threads[NUM_THREADS];
   int rc;
   int i;
   for( i=0; i < NUM_THREADS; i++ ){
      cout << "main() : creating thread, " << i << endl;
      rc = pthread_create(&threads[i], NULL,
                          PrintHello, (void *)i);
      if (rc){
         cout << "Error:unable to create thread," << rc << endl;
         exit(-1);
      }
   }
   pthread_exit(NULL);
}

compile it with g++ xxx.cpp -o test -lphread

 

Example 2

Passing Arguments to Threads

?
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
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstdlib>
#include <pthread.h>
 
using namespace std;
 
#define NUM_THREAD 5
 
struct thread_data  {
    int thread_id;
    char *message;
};
 
void *PrintHello(void *threadarg)  {
    struct thread_data *my_data;
    my_data = http://www.mamicode.com/(struct thread_data*) threadarg;
 
    cout << "Thread ID : " << my_data->thread_id << endl;
    cout << "message : " << my_data->message << endl;
 
    pthread_exit(NULL);
}
 
int main()  {
    pthread_t threads[NUM_THREAD];
    struct thread_data td[NUM_THREAD];
 
    int rc;
    int i;
 
    for(i = 0; i < NUM_THREAD; i ++)  {
        cout << "main() : creating thread " << i << endl;
        td[i].thread_id = i;
        td[i].message = "This is message";
        rc = pthread_create(&threads[i], NULL, PrintHello, (void*)&td[i]);
         
        if(rc)  {
            cout << "Error : unable to create thread " << rc << endl;
            exit(-1);
        }
    }
    pthread_exit(NULL);
}

 

Example 3

Joining and Detaching thread

 

 

---恢复内容结束---