#include <iostream>
#include <thread>
using namespace std;
void func(string &s)
{
cout<<"hello,this is my thread,thread id is"
<<this_thread::get_id()<<endl;
}
int main()
{
string s = "test";
thread th = thread(func,std::ref(s));
th.join();
cout<<"this is main thread"<<endl;
}
struct A{
void operator() (){
cout<<"I'm A"<<endl;
}
}
int main()
{
thread th = thread(A());
th.join();
}
int main()
{
string s = "test";
auto f = [&s](int a,int b){
cout<<s<<endl;
cout<< a+b<<endl;
};
thread f1 = thread([&s](int a,int b){
cout<<z<<" "<<a+b<<endl;
},2,3);
f1.join();
f(1,2);
}
template<class T>
void measure(T&& func)
{
using namespace std::chrono;
auto start = sysytem_clock::now();
func();
duration<double> diff_ = sysytem_clock::now() - start;
cout<<diff_.count()<<"seconds"<<endl;
}
int main()
{
measure([](){
long long s =0;
for(int i = 0; i<1000;i++)
s+=i;
cout<<s<<endl;
});
}
template <class T>
void measure(T&& func)
{
using namespace std::chrono;
auto start = system_clock::now();
func();
duration<double> diff = sysytem_clock::now() - start;
cout<<"cost:"<<diff.count()<<" seconds"<<endl;
}
void sum(long start,long end,long& ans)
{
long s = 0;
for(long i = start; i<end;i++)
{
s+=i;
}
ans = s;
}
long s = 1000000000;
int main()
{
measure([](){
long ans1,ans2;
thread t1 = thread(sum,0,s/2,std::ref(ans1));
thread t2 = thread(sum,s/2,s,std::ref(ans2));
t1.join();
t2.join();
cout<<ans1+ans2<<endl;
});
measure([](){
long ans;
sum(0,s,ans);
cout<<ans<<endl;
});
}
#include <feature>
template <class T>
void measure(T&& func)
{
using namespace std::chrono;
auto start = system_clock::now();
func();
duration<double> diff = sysytem_clock::now() - start;
cout<<"cost:"<<diff.count()<<" seconds"<<endl;
}
long sum(long start,long end)
{
long s = 0;
for(long i = start; i<end;i++)
{
s+=i;
}
return s;
}
const long s = 1000000;
int main()
{
measure([](){
const int k =4;
vector<future<long>> vf;
vf.reverse(k);
for(int i = 0; i<k;i++)
{
vf.push_back(std::async(sum, i == 0 ? 0 : (s/k)*i,(s/k)*(i+1)))
}
long ans=0;
for(int i =0;i<k;i++)
ans+=vf[i].get();
cout<<ans<<endl;
});
}
std::mutex mtx;
void sum(int &s)
{
mtx.lock();
for(long i = 0; i<1000;i++)
{
s++;
}
mtx.unlock();
}
const long s = 1000000;
int main()
{
measure([](){
const int k =4;
int s{0};
vector<thread> vf;
for(int i = 0; i<k;i++)
{
vf.emplace_back(sum, std::ref(s));
}
for(int j =0;j<4;j++)
{
vf[j].join();
}
cout<<s<<endl;
});
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-8417.html