当前位置: 首页 > wzjs >正文

企业网站推广平台橙色网站欣赏

企业网站推广平台,橙色网站欣赏,网站点击率如何做,网站建设动态C —— 线程同步(互斥锁) 线程同步互斥锁(互斥量)测试代码mutex互斥锁 线程同步 线程同步:多线程协同工作,协商如何使用共享资源。 C11线程同步包含三部分内容: 互斥锁(互斥量&…

C++ —— 线程同步(互斥锁)

  • 线程同步
  • 互斥锁(互斥量)
    • 测试代码
    • mutex互斥锁

线程同步

线程同步:多线程协同工作,协商如何使用共享资源。
C++11线程同步包含三部分内容:

  1. 互斥锁(互斥量)
  2. 条件变量
  3. 生产/消费者模型

互斥锁(互斥量)

只有加锁解锁两种状态,确保同一时间只有一个线程访问共享资源。
访问共享资源之前加锁,加锁成功访问资源,访问完成解锁释放。
若某线程持有锁,其他线程形成等待队列

C++11提供了4种互斥锁:

  • mutex:互斥锁(最常用)
  • timed_mutex:带超时机制的互斥锁
  • recursive_mutex:递归互斥锁
  • recursive_timed_mutex:带超时机制的递归互斥锁

测试代码

#include <iostream>
#include <thread>
using namespace std;void func (int n, const string& s) {for (int i = 1; i <= 10; i++) {cout << "No." << i << ", n = " << n << ", s = " << s << endl;this_thread::sleep_for(chrono::seconds(1));}
}
a
int main () {thread t1(func, 1, "t1");thread t2(func, 2, "t2");thread t3(func, 3, "t3");thread t4(func, 4, "t4");thread t5(func, 5, "t5");thread t6(func, 6, "t6");t1.join();t2.join();t3.join();t4.join();t5.join();t6.join();return 0;
}

cout属于全局对象,若多线程都用它向屏幕输出文字,会出乱子。线程越多,越容易乱。

mutex互斥锁

使用互斥锁cout加锁,代码如下:

#include <iostream>
#include <thread>
#include <mutex> // 使用互斥锁需要包含的头文件
using namespace std;mutex mtx; // 创建互斥锁对象,用于保护共享资源cout对象。void func (int n, const string& s) {for (int i = 1; i <= 10; i++) {// 每次调用cout对象之前,申请加锁mtx.lock();cout << "No." << i << ", n = " << n << ", s = " << s << endl;// 用完了就解锁mtx.unlock();this_thread::sleep_for(chrono::seconds(1));}
}int main () {// 代码不变...
}

再看一段示例代码:

#include <iostream>
#include <chrono> // 时间相关操作的头文件
#include <thread> // 线程相关操作的头文件
#include <mutex> // 互斥锁的头文件
using namespace std;int a = 0;
mutex mtx; // 创建互斥锁对象,用于保护共享资源a变量。void func () {for (int i = 0; i < 1000000; ++i) {mtx.lock();a++;mtx.unlock();}
}int main () {auto start = chrono::steady_clock::now();thread t1(func);thread t2(func);t1.join();t2.join();auto end = chrono::steady_clock::now();cout << "time = " << chrono::duration_cast<chrono::milliseconds>(end - start).count() << "ms" << endl;cout << "a = " << a << endl;return 0;
}

运行结果:

time = 101ms
a = 2000000

在代码中添加一些打印信息,能更清楚的观察到:两个线程申请加锁,只有一个成功,另外一个线程等待,直到第一个线程解锁后第二个线程才能加锁。

#include <iostream>
#include <chrono> // 时间相关操作的头文件
#include <thread> // 线程相关操作的头文件
#include <mutex> // 互斥锁的头文件
using namespace std;int a = 0;
mutex mtx;void func () {for (int i = 0; i < 1000000; ++i) {cout << "thread id: " << this_thread::get_id() << ", 申请加锁" << endl;mtx.lock();cout << "thread id: " << this_thread::get_id() << ", 加锁成功" << endl;a++;this_thread::sleep_for(chrono::seconds(5));mtx.unlock();cout << "thread id: " << this_thread::get_id() << ", 解锁" << endl;this_thread::sleep_for(chrono::seconds(1));}
}int main () {thread t1(func);thread t2(func);t1.join();t2.join();cout << "a = " << a << endl;return 0;
}

运行结果:

thread id: 139727756003072, 申请加锁
thread id: 139727756003072, 加锁成功
thread id: 139727747610368, 申请加锁
thread id: 139727756003072, 解锁
thread id: 139727747610368, 加锁成功
thread id: 139727756003072, 申请加锁
thread id: 139727747610368, 解锁

感谢浏览


文章转载自:

http://cwKNUg7I.ykrkb.cn
http://VLIJevL0.ykrkb.cn
http://FUlikjga.ykrkb.cn
http://7OwGb7Dr.ykrkb.cn
http://O6c3qzxv.ykrkb.cn
http://OL07owTI.ykrkb.cn
http://vKvEPFNI.ykrkb.cn
http://fx2PS96c.ykrkb.cn
http://smAzZuGJ.ykrkb.cn
http://NitnhuXv.ykrkb.cn
http://qLABQ19u.ykrkb.cn
http://0miTyrs8.ykrkb.cn
http://co7JjctV.ykrkb.cn
http://MXE027D8.ykrkb.cn
http://BtIzV7eX.ykrkb.cn
http://7o26H0oe.ykrkb.cn
http://ibwtockP.ykrkb.cn
http://gUEmBeXL.ykrkb.cn
http://IFQSGvxe.ykrkb.cn
http://uGBVncnE.ykrkb.cn
http://9xiH84du.ykrkb.cn
http://V3lK5Vgp.ykrkb.cn
http://oGaFZKX0.ykrkb.cn
http://RgqUnxBn.ykrkb.cn
http://TtsTgOrK.ykrkb.cn
http://jIOkF5L1.ykrkb.cn
http://mDuKhTjD.ykrkb.cn
http://GeMhtDpX.ykrkb.cn
http://l1CdsloP.ykrkb.cn
http://qBbAZm6j.ykrkb.cn
http://www.dtcms.com/wzjs/638720.html

相关文章:

  • 广州建站优化宝安建网站公司
  • 咸阳企业网站设计开发制作php网站授权
  • 三门县住房和城乡建设规划局网站好的企业型网站模板
  • 黄图网站有哪些 推荐天津首页
  • 找做cad彩拼的网站汽车配件外贸网站
  • 网站的运营维护企业网站建设的公司
  • 中国设计网站官网地址html5动画效果代码
  • 360网站建设搜索建站快车的功能介绍
  • 有ip怎么用自己的主机做网站南京做网站多少钱
  • 网站域名的安全性什么是单页网站
  • 网站注册页面怎么做数据验证28网站开发
  • 北京网站建设服务中心设计制作过程
  • 仲恺住房和城乡建设局网站焊工培训内容有哪些
  • 廊坊做网站公司排名门户网站 建设 投入
  • 网站网址正能量动漫制作专业在广西哪所院校最强
  • 建设部网站 专业评估青岛做商城网站
  • 太原网站优化多少钱网站安全维护内容
  • 手机网站自动适配代码装饰公司师大排名
  • 怎么让百度收录我的网站wordpress注册邮件怎么设置
  • 加热器网站怎么做的国内知名的app开发
  • 网站主页作品欣赏开网店卖什么最赚钱
  • 网站建设 自动跳转官网steam
  • 外贸网站营销建站邀请码网站怎么做
  • 个人备案经营网站备案吗长沙网站开发公
  • 企业网站建设的总体目标网络推广服务
  • 怎么增加网站外链学网站开发
  • 有没有傻瓜式建设网站百度统计
  • 网站开发自定义模块零食网站建设的必要性
  • 忻州做网站wordpress创建单页
  • 廊坊网站建设方案最新报价做美食网站的图片