C++17实现的读写锁「建议收藏」

C++17实现的读写锁「建议收藏」1.shared_mutex和shared_lock很有意思的两个关于共享线程锁的特性#include#include<shared_mutex>#include#include#includeusingnamespacestd;classCounter{public:std::size_tGet()const{std::shared_lockstd:…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.shared_mutex和shared_lock很有意思的两个关于共享线程锁的特性
#include
#include<shared_mutex>
#include
#include
#include
using namespace std;
class Counter
{

public:
std::size_t Get() const
{

std::shared_lockstd::shared_mutex lock(mtx);
return value_;
}
void Increase()
{

std::unique_lockstd::shared_mutex lock(mtx);
value_++;
}
void Reset()
{

std::unique_lockstd::shared_mutex lock(mtx);
value_=0;
}
private:
mutable std::shared_mutex mtx;
std::size_t value_ = 0;
};
std::mutex g_mtx;
void worker(Counter &counter)
{

for (int i = 0; i < 3; i++)
{

counter.Increase();
std::size_t value = counter.Get();
std::lock_guardstd::mutex lock(g_mtx);
cout << std::this_thread::get_id() << ” ” << value << endl;
}
}
int main()
{

const std::size_t size = 2;
Counter counter;
vectorstd::thread v;
v.reserve(size);
v.emplace_back(worker, std::ref(counter));
v.emplace_back(worker, std::ref(counter));
for (std::thread &t : v)
{

t.join();
}
system(“pause”);
return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169997.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 游戏服务器架构演化史pdf_分布式游戏服务器

    游戏服务器架构演化史pdf_分布式游戏服务器类型1:卡牌、跑酷等弱交互服务端卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的HTTP服务器:登录时可以使用非对称加密(RSA,DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密key并发送给客户端。之后双方都用HTTP通信,并用那个key进行RC4加密。客户端收到key和时间

    2022年10月21日
    3
  • kaptcha验证码使用

    kaptcha验证码使用参照文章完善:http://blog.csdn.net/pandakong/article/details/8799534效果图:官方地址:https://code.google.com/p/kaptcha/w/listkaptcha是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用c

    2022年6月18日
    20
  • Pycharm安装jupyter notebook无法在SciView查看变量

    Pycharm安装jupyter notebook无法在SciView查看变量Pycharm执行jupyter项目时,会提醒笔记本内核与项目内核不匹配,如下图:若点击右上角将项目内核注册为内核,那么jupyter将会使用新的内核,此时执行cell,将会显示如下图:解决方法:Pycharm正上方内核选择PYTHON3点击左上角文件设置搜索jupyter,将红色上方框去掉勾选再次运行,显示变量注意:若没有将项目内核注册为内核,直接勾选不检查就可行…

    2022年8月28日
    1
  • Python暴力激活成功教程wifi密码

    Python暴力激活成功教程wifi密码今天给大家分享一个使用Python激活成功教程WiFi密码的代码,这个代码也是非常简单,这里需要用Python中的pywifi这个库,所以需要在DOS命令下安装这个库,同样使用pipinstallpywifi,很简单就安装成功了,我用的是Python3,所以各位看的时候需要注意这一点。接下来我们一步一步分析主要代码,后面同样附上完整的代码。对了,需要注意一点,就是电脑必须是要用无线网卡的。首先我们…

    2022年8月22日
    6
  • pycharm 激活码 2022_通用破解码「建议收藏」

    pycharm 激活码 2022_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    2.0K
  • matlab求解微分方程组(matlab解微分方程的数值解)

    如何用matlab来求解简单的微分方程?举例来说明吧。求解三阶常微分方程。我们知道,求解高阶常微分方程可以化为求解一阶常微分方程组。编写函数eq3.m:%解常微分方程3*y”’+5*y”+6*sin(t)*y=costfunctionydot=eq3(t,y)ydot=[y(2);y(3);(cos(t)-5*y(3)-6*sin(t)*y(1))/3];其中,ydot为一个

    2022年4月18日
    345

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号