多线程
在C++中多线程的实现方法有POSIX与C++11自带库,在本文中将使用POSIX方法。
POSIX
导入库
1 2
| #include <iostream> #include <pthread.h>
|
POSIX多线程函数基础API
1 2 3 4 5 6
| pthread_create() pthread_exit() pthread_join() pthread_self() pthread_cancel() pthread_kill()
|
创建线程函数
1
| int pthread_create(pthread_t *pid,const pthread_attr_r *attr,void *(*start_routine)(void *),void *arg);
|
参数pid为指针,指向创建完成之后的线程ID。
pthread_t为unsigned long int类型。
attr指向线程属性结构,为pthread_attr_r的指针。
start_routine指向线程函数的地址。
arg指向传给线程函数的参数,成功为0;
pthread_join的作用
pthread_create创建完线程后,主线程仍然会执行pthread_create后面的代码,就会导致主程序已经结束了但是子线程还未创建完的情况出现,所以就需要让主线程等待,所以pthread_join则为阻塞函数。
1
| int pthread_join(pthread_t pid,void ** value_ptr);
|
value_ptr通常可以为NULL,若不为NULL,则pthread_t会复制一份线程退出值去内存区域内,并让*value_ptr指向该内存区域,所以pthread_join还能获得子线程的返回值。
代码演示
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
| #include <iostream> #include <thread> #include <pthread.h> #include <unistd.h>
using namespace std;
void *threadfunction(void *arg) { cout << "in threadfunction" << endl; return (void*)0; }
int main(int argc, char* argv[]) { pthread_t tidp; int ret; ret = pthread_create(&tidp, NULL, threadfunction, NULL); if (ret) { cout << "pthread_create failed:" << ret << endl; return -1; } sleep(1); cout << "in main thread created." << endl; return 0; }
|
以上代码会输出如下:
1 2
| in threadfunction in main thread created.
|