一、介绍
C++下可以使用thread加入线程,有两种方式加入线程,分别是join和detach,写法如下:
join这个属于等待线程,join特点是主线程必须等子线程执行完才能退出
int main()
{
printf("这个属于主线程,也就是main的线程\n");
std::thread udp(udpRecv);
udp.join(); //join这个属于子线程,join特点是主线程必须等子线程执行完才能退出
return 0;
}
detach属于分离线程,主线程不需要等待子线程,它和主线程独立
?
int main()
{
printf("这个属于主线程,也就是main的线程\n");
std::thread udp(udpRecv);
udp.detach();
return 0;
}
二、代码
1.join属于等待线程,一个线程没结束不能执行另一个线程
#include <iostream>
#include <thread>
using namespace std;
void t1()
{
int i = 0;
while (1)
{
printf("%d\n", i++);
}
}
void t2()
{
char c = 'a';
while (1)
{
printf("%c\n",c++);
}
}
int main()
{
thread T1(t1);//入参为函数名
T1.join();
std::cout << "这是主线程\n";
char c = 'a';
while (1)
{
printf("%c\n", c++);
}
return 0;
}
?2.detach属于分离线程,主线程和子线程可以同步执行
#include <iostream>
#include <thread>
using namespace std;
void t1()
{
int i = 0;
while (1)
{
printf("%d\n", i++);
}
}
void t2()
{
char c = 'a';
while (1)
{
printf("%c\n",c++);
}
}
int main()
{
thread T1(t1);//入参为函数名
T1.detach();
std::cout << "这是主线程\n";
char c = 'a';
while (1)
{
printf("%c\n", c++);
}
return 0;
}
detach主线程子线程互不干扰,且位置可以随意放置
?
|