c++11多线程的创建和unique_lock<mutex>的使用
来源:互联网 发布:院士 知乎 编辑:程序博客网 时间:2024/06/01 11:19
1.多线程的创建
(1)在cmakelist中加入编译选项c11和多线程
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -Wall -std=c++11 -pthread -g -march=native”)
-g 表示debug
(2)包括头文件 #include<thread>
(3)新建线程
新建线程两个
使用thread 线程名来新建一个线程
并在线程中threadHello调用函数 void sayHello()
并在线程中threadWorld调用函数 void sayWorld()
#include <iostream>#include<thread>#include<unistd.h>using namespace std;void sayHello(){ while(1) { sleep(1); cout<<endl<<"hello"<<endl; }}void sayWorld(){ while(1) { sleep(1); cout<<endl<<"world"<<endl; }}int main(){ thread threadHello(&sayHello); thread threadWorld(&sayWorld); threadHello.join(); threadWorld.join(); return 0;}
2.线程的同步(unique_lock的使用)
unique_lock中的unique表示独占所有权。
unique_lock独占的是mutex对象,就是对mutex锁的独占。
用法:
(1)新建一个unique_lock 对象
(2)给对象传入一个std::mutex 对象作为参数;
std::mutex mymutex;
unique_lock lock(mymutex);
因此加锁时新建一个对象lock
unique_lock lock(mymutex);
而这个对象生命周期结束后自动解锁。
如下例子
#include <iostream>#include<thread>#include<unistd.h>#include<mutex>using namespace std;std::mutex mymutex;void sayHello(){ int k=0; unique_lock<mutex> lock(mymutex); while(k<2) { k++; cout<<endl<<"hello"<<endl; sleep(2); }}void sayWorld(){ unique_lock<mutex> lock(mymutex); while(1) { cout<<endl<<"world"<<endl; sleep(1); }}int main(){ thread threadHello(&sayHello); thread threadWorld(&sayWorld); threadHello.join(); threadWorld.join(); return 0;}
程序运行步骤是这样的:
首先同事运行threadHello线程和threadWorld线程
先进入threadHello线程的sayHello()函数,这个时候加了mymutex锁,另外一个threadWorld线程进入后发现mymutex锁没有释放,只能等待。
当过去两个循环(每个循环2秒后)threadHello线程结束,unique_lock lock(mymutex)的生命周期结束,mymutex锁释放,执行threadWorld线程,此时开始一直say world。
- c++11多线程的创建和unique_lock<mutex>的使用
- c++11的mutex unique_lock和lock_guard区别
- C++11中std::unique_lock的使用
- RAII 想到AutoLock,Mutex类和C++11中的unique_lock
- std::mutex std::unique_lock std::lock_guard std::recursive_mutex的理解
- lock_guard和unique_lock的区别
- 多线程互斥量Mutex的使用
- C++11中lock_guard和unique_lock的区别
- boost中shared_lock和unique_lock的区别
- std::lock_guard 和 std::unique_lock的区别
- C++11 多线程2——Mutex的错误使用
- 多线程的创建和使用
- 多线程的创建和使用
- [C++11 并发编程] 08 - Mutex std::unique_lock
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- Eclipse实用操作
- DPDK-实战之rxtx_callbacks(回调函数)
- Java List细节
- 获取FTP服务器上以“ipva”“ap”开头,和其他文件的数目
- vue.js初学1
- c++11多线程的创建和unique_lock<mutex>的使用
- Logger日志库的基本使用
- layer.closeAll()无法关闭弹窗的解决办法之一
- [51nod-1563]坐标轴上的最大团
- hdu 6180 Schedule 贪心
- zookeeper单机单独实例安装-windows
- Idea中自动注释的缩进(避免添加注释自动到行首)
- 学完python写爬虫,不亦乐乎
- Android6.0之后动态权限申请