最近工作需要,对多线程做了一点了解,现在将多线程的创建,函数传参做个小结。
一、linux c多线程
1.头文件:#include <pthread.h>
2.
创建线程:pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg); //参数依次是:创建的线程id,线程参数,调用的函数,传入的函数参数。
线程等待:pthread_join( pthread_t thread, void **value_ptr); //让当前线程在等待指定线程执行完后再继续执行。
线程退出:pthread_exit(void *rval_ptr); //主动退出当前线程。
3.代码如下:
这个程序,创建了10个线程,这个线程函数为print_i,作用是打印出main函数每一个传递过来的参数i,但是pthread_create第四个函数参数只能是指针,所以如果要传整型参数,就要先强转为指针,再在线程函数print_i 中强转回来。?
执行结果如下:
注:如果要传递多个参数,就比较麻烦,需要用到结构体。然后我又查阅了一下资料,发现c++的多线程写法对于传递参数会更加方便,下面介绍一下c++的多线程写法~
二、c++多线程
1.头文件:#include<thread>
2.代码如下:
#include <iostream>
#include <thread>
using namespace std;
#define THREADS_NUM 50
int print_i(int i) {
cout << i << endl;
return 0;
}
int main()
{
for (int i = 0; i < THREADS_NUM; ++i) {
std::thread t(print_i, i);//可以传递很多个参数,类型也都可以
t.detach();//t.detach表示该线程在后台允许,无需等待该线程完成,继续执行后面的语句。
}
return 0;
}
?执行结果如下:
这个程序,创建了50个线程,这个线程函数为print_i,作用是打印出main函数每一个传递过来的参数i。
|