c++中通过pthread实现多线程

一 环境

 1.  包含头文件#include

  2.编译时加上-lpthread参数  

二 函数

     1. int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg); ----创建线程

  返回值:

        若成功则返回0,否则返回出错编号

        参数

  第一个参数为指向线程标识符指针

  第二个参数是线程属性,一般设为NULL。

  第三个参数是线程运行函数的起始地址,也就是函数名,该函数的返回值和参数都需要为void* 类型。

  最后一个参数是运行函数的参数,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,把这个结构的地址作为arg的参数传入。

     2. int pthread_join(pthread_t thread, void **retval); -------用来等待一个线程的结束

         返回值:

         0代表成功。 失败,返回的则是错误号。

        参数:

         thread: 线程ID。

      retval: 用户定义的指针,用来存储被等待线程的返回值,一般设为NULL。

三 举例

       void* test(void* context){

             print "hello,world";

}

       int main(){

         pthread_t tid ;
         ret = pthread_create(&tid, NULL,test,NULL);

         pthread_join(tid,NULL);

         return 0;

}

四 错误

1.  pthread_create的返回值为0,但是test方法中的print语句并没有执行,开始以为缓冲区没有flush,加入flush(stdin)之后,print语句有时执行,有时不执行。原因是:没有调用pthread_join 函数,main函数的里的主进程很快结束,子线程还没来得及执行就结束了。

2. 创建了两个子线程A和B,main函数里调用pthread_join函数:B线程要等A线程创建成功之后才能创建,线程创建不稳定,目前在main函数里是通过sleep的方法实现。todo 有没有相应的函数或者是其它方式来实现。

3. todo:线程结束的方式(1.函数 2.return)

你可能感兴趣的:(c++)