c++ 多线程并

//1.创建线程
#include <thread>
void func(){
  std::this_thread::sleep(std::chrono::microseconds(50));//当前线程休眠
  std:::this_thread::get_id();//获取当前线程id
}
int main(){
  std::thread thread(func,a);
}
//.join() 主线程等待子线程结束
//.detach() 主线程与子线程分离


//2.互斥量
//两个线程访问了公共资源,需要对资源作保护
#include <thread>

#include <mutex>
std::mutex mtx;
int i=0;
void t1(){
  mtx.lock();//上锁其他程序无法访问i
  i++
  mtx.unlock();//解锁

}
int main(){
  std::thread t1(func);
  std::thread t2(func);
  t1.join();
  t2.join();
}
//问题1:可呢个出现死锁的情况,当lock和unlock之间的函数很复杂时
//解决:
//锁用 std::lock_guard<std::mutex>lock(mtx1);
//这个类会先上锁,但是在析构函数中解锁
//还有 std::unique_lock<std::mutex> lock3(mtx1);
//lock3.unlock();//可以主动释放
//问题2:可能出现多个锁,锁冲突
//解决:
//std::lock(mtxt1,mtxt2);

 

posted @ 2022-03-16 19:17  开锁球  阅读(61)  评论(0)    收藏  举报