#include <iostream>
#include <thread>
using namespace std;
void proc(int &a)
{
cout<<"我是子线程,传入参数为"<<a<<endl;
cout<<"子线程中显示子线程id为"<<this_thread::get_id()<<endl;
}
int main()
{
cout<<"我是主线程"<<endl;
int a = 9;
thread th2(proc,ref(a));
cout<<"主线程中显示子线程id为"<<th2.get_id()<<endl;
th2.join();
return 0;
}
读写锁
#include <iostream>
#include <thread>
#include <shared_mutex>
using namespace std;
shared_mutex s_m;
string book;
void read(){
s_m.lock_shared();
cout<<book;
s_m.unlock_shared();
}
void write(){
s_m.lock();
book = "new context";
s_m.unlock();
}
lock()与unlock():
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex m;
void proc1(int a){
m.lock();
cout<<"proc1函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+2<<endl;
m.unlock();
}
void proc2(int a){
m.lock();
cout<<"proc2函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+1<<endl;
m.unlock();
}
int main(){
int a = 0;
thread t1(proc1,a);
thread t2(proc2,a);
t1.join();
t2.join();
return 0;
}
lock_guard:
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex m;
void proc1(int a){
lock_guard<mutex> g1(m);
cout<<"proc1函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+2<<endl;
}
void proc2(int a){
{
lock_guard<mutex> g2(m);
cout<<"proc2函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+1<<endl;
}
cout<<"作用域外的内容3"<<endl;
cout<<"作用域外的内容4"<<endl;
cout<<"作用域外的内容5"<<endl;
}
int main(){
int a = 0;
thread t1(proc1,a);
thread t2(proc2,a);
t1.join();
t2.join();
return 0;
}
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex m;
void proc1(int a){
m.lock();
lock_guard<mutex> g1(m,adopt_lock);
cout<<"proc1函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+2<<endl;
}
void proc2(int a){
lock_guard<mutex> g2(m);
cout<<"proc2函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+1<<endl;
}
int main(){
int a = 0;
thread t1(proc1,a);
thread t2(proc2,a);
t1.join();
t2.join();
return 0;
}
unique_lock:
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex m;
void proc1(int a)
{
unique_lock<mutex> g1(m,defer_lock);
cout<<"***********************"<<endl;
g1.lock();
cout<<"proc1函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+2<<endl;
g1.unlock();
cout<<"************"<<endl;
g1.lock();
cout<<"***"<<endl;
}
void proc2(int a)
{
unique_lock<mutex> g2(m,try_to_lock);
if(g2.owns_lock())
{
cout<<"proc2函数正在改写a"<<endl;
cout<<"原始a = "<<a<<endl;
cout<<"现在a = "<<a+1<<endl;
}
else
cout<<" "<<endl;
}
int main()
{
int a = 0;
thread t1(proc1, a);
t1.join();
thread t2(proc2, a);
t2.join();
return 0;
}