Cpp-多线程简述

Cpp-多线程简述

对于多线程而言是所有程序的利器,所以多线程是比较关键的。
在C++11中,引入了thread这个库函数,所以对于线程操作就比较简单。

一、定义线程

void thread01()
{
	for (int i = 0; i < 5; i++)
	{
		std::cout << "Thread 01 is working!" << std::endl;
		Sleep(100);
	}
}
在C++11中定义线程函数与定义普通函数并没有什么区别,不要加特殊的Hand。

二、线程实例

定义好线程后,我们得实例化线程才能使用。
大概语句是
std::thread thread_name(thread_function);

std::thread task01(thread01);
大致规则是先定义线程名,然后在参数里面填上线程函数名。

三、线程加入

通过join函数则可以进行线程的加入,join函数会阻塞主线程.
task01.join();

四、线程分离

由于join函数会使得主线程阻塞,主线程必须得等待子线程执行完毕后才能启动。所以要使得线程分离。独立运行,不会阻碍主线程。

task02.detach();
这样就可以使得两个线程进行分离产生并行的效果。

五、带参子线程

void thread01(int num)
{
	for (int i = 0; i < num; i++)
	{
		std::cout << "Thread 01 is working!" << std::endl;
		Sleep(100);
	}
}

六、互斥执行

由于当多个线程对一个变量进行竞争的时候,就会产生资源争夺,会使得数据紊乱,所以得用互斥量来进行避免。
#include 
#include 
#include 
#include 
#include 
#include 
std::mutex mu;
int sum = 0;
void thread01()
{
	for (int i = 1; i <= 50; i++)
	{
		mu.lock();
		sum += i;
		std::cout << sum << std::endl;
		mu.unlock();
	}
}
void thread02()
{
	for (int i = 51; i <= 100; i++)
	{
		mu.lock();
		sum += i;
		std::cout << sum << std::endl;
		mu.unlock();
	}
}
int main()
{
	clock_t startTime, endTime;
	startTime = clock();
	std::thread task01(thread01);
	std::thread task02(thread02);
	task01.join();
	task02.join();
	std::cout << sum << std::endl;
	endTime = clock();
	std::cout << endTime - startTime << std::endl;
	system("pause");
	return 0;
}
单线程执行
时间少很多,为1。。。。。所以说对于大数据才采用多线程,否则单线程效率还是高很多,毕竟这样跳来跳去。





你可能感兴趣的:(--cpp)