您的位置:首页 > 编程语言 > C语言/C++

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

2012-11-14 17:07 183 查看
一 环境

 1.  包含头文件#include<pthread.h>)

  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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: