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

投资者关系互动平台天津百度整站优化服务

投资者关系互动平台,天津百度整站优化服务,javaweb一个旅游网站怎么做,做微信小程序的软件C线程库和POSIX线程库锁的区别 C线程库代码段的互斥:mutex、recursive_mutex、timed_mutex、recursive_timed_mutex互斥量mutex:直接进行lock()或者unlock()递归互斥锁recursive_mutex:可以多次加锁,意味着加几次锁就需要解几次锁…

C++线程库和POSIX线程库锁的区别

  • C++线程库
    • 代码段的互斥:mutex、recursive_mutex、timed_mutex、recursive_timed_mutex
      • 互斥量mutex:直接进行lock()或者unlock()
      • 递归互斥锁recursive_mutex:可以多次加锁,意味着加几次锁就需要解几次锁
      • 定时互斥锁timed_mutex:可以定时加锁,规定什么时间让临界区代码实现互斥访问
      • 递归定时互斥锁recursive_timed_mutex:在规定加锁时间的同时,还能实现递归的多次加锁要求
      • lock_guard:RAII的方式封装了锁
      • unique_lock:RAII方式+加锁/解锁
    • 变量的原子性操作:atomic
  • POSIX线程库
    • 互斥锁:pthread_mutex
    • 自旋锁:pthread_spin
    • 读写锁:pthread_rwlock

C++线程库

C++线程库中提供了多种类型的原子性操作,主要分为变量的原子性操作和代码段的互斥加锁

代码段的互斥:mutex、recursive_mutex、timed_mutex、recursive_timed_mutex

如果一段代码是在多线程编程下执行的,那么必然要涉及到线程安全的问题,需要对该代码段进行加锁保护

#include <iostream>
#include <mutex>
#include <thread>
#include <vector>std::mutex g_mutex;
int g_count = 0;void Counter() {g_mutex.lock();int i = ++g_count;std::cout << "count: " << i << std::endl;// 前面代码如有异常,unlock 就调不到了。g_mutex.unlock();
}int main() {const std::size_t SIZE = 4;// 创建一组线程。std::vector<std::thread> v;v.reserve(SIZE);for (std::size_t i = 0; i < SIZE; ++i) {v.emplace_back(&Counter);}// 等待所有线程结束。for (std::thread& t : v) {t.join();}return 0;
}

互斥量mutex:直接进行lock()或者unlock()

上述例子中,使用了mutex这个锁,也就是c++中提出的锁,但是这样的方式导致一个线程执行g_count时,其他线程在进行阻塞等待,是有其自己的缺陷的

递归互斥锁recursive_mutex:可以多次加锁,意味着加几次锁就需要解几次锁

定时互斥锁timed_mutex:可以定时加锁,规定什么时间让临界区代码实现互斥访问

递归定时互斥锁recursive_timed_mutex:在规定加锁时间的同时,还能实现递归的多次加锁要求

lock_guard:RAII的方式封装了锁

使用了RAII的思想,让类对象1去管理锁资源,在创建对象的时候加锁,析构对象的时候解锁,以此来预防死锁

unique_lock:RAII方式+加锁/解锁

除了使用RAII的思想之外,还提供了加锁解锁修改锁的功能,比lock_guard增加了一些对锁的操作

变量的原子性操作:atomic

int a
这个变量在整个多线程编程中如果是一个全局变量(局部变量也可以),那么当多个线程需要对其进行修改操作时,必然涉及到线程安全的问题,需要对这个变量加锁保护,但是使用上述的mutex类型会显得大炮打苍蝇,有点兴师动众了,同时如果使用mutex加锁的方式来实现互斥,会让其他线程处于阻塞等锁的状态,会影响程序的效率

c++11中提供了一系列原子操作
在这里插入图片描述

#include <iostream>
using namespace std;
#include <thread>
//需要包含对应的头文件
#include <atomic>
atomic_long sum{ 0 };
void fun(size_t num)
{for (size_t i = 0; i < num; ++i)sum ++;   // 原子操作
}
int main()
{cout << "Before joining, sum = " << sum << std::endl;thread t1(fun, 1000000);thread t2(fun, 1000000);t1.join();t2.join();cout << "After joining, sum = " << sum << std::endl;return 0;
}

将普通变量修改为原子类型的变量,这样就无需进行加锁解锁操作了,会使代码的运行效率更高,线程自己就能够对这些原子类型的变量实现互斥访问了

POSIX线程库

互斥锁:pthread_mutex

有线程尝试加互斥锁时,如果没有加到锁,该线程会挂起并且切换,只有当其他线程将该互斥锁释放之后,该线程才会被唤醒继续加锁。

和C++中的mutex相似,可以对临界区代码进行加锁保护,但是需要对该互斥锁初始化,并且需要进行销毁

pthread_mutex_init()//初始化
pthread_mutex_lock()//加锁
pthread_mutex_unlock()//解锁
pthread_mutex_destroy()//销毁

自旋锁:pthread_spin

与互斥锁相比,它的效率更高,但是也更占CPU资源。

当有线程尝试加自旋锁时,如果该线程没有加到锁,那么会持续加锁,直到拿到锁为止,线程不会挂起也不会切换,因此加锁效率高,但也更加占用CPU资源

读写锁:pthread_rwlock

当存在这样的场景时:对数据的修改操作少,有大量的读数据操作,在这样的情况下对临界资源进行加锁会导致程序效率低下,那么就需要有一个读不加锁,而只有在写数据的时候才进行加锁来提高程序的效率,读写锁就是这样一个锁
在这里插入图片描述
读共享,写独占,读锁优先级高


文章转载自:
http://dinnconemertine.wbqt.cn
http://dinncononfeasance.wbqt.cn
http://dinncohydrosere.wbqt.cn
http://dinncoappropriative.wbqt.cn
http://dinncodementation.wbqt.cn
http://dinncocollection.wbqt.cn
http://dinncoavascular.wbqt.cn
http://dinncoeaglewood.wbqt.cn
http://dinncosideline.wbqt.cn
http://dinncomonacal.wbqt.cn
http://dinncotaxable.wbqt.cn
http://dinncoglide.wbqt.cn
http://dinncodoughty.wbqt.cn
http://dinncodigitalose.wbqt.cn
http://dinncoreparations.wbqt.cn
http://dinncokamet.wbqt.cn
http://dinncocharisma.wbqt.cn
http://dinncoarchbishop.wbqt.cn
http://dinncofirearms.wbqt.cn
http://dinncobamboozle.wbqt.cn
http://dinncozygosperm.wbqt.cn
http://dinncoinconsolably.wbqt.cn
http://dinncodebar.wbqt.cn
http://dinncozaire.wbqt.cn
http://dinncocryosurgeon.wbqt.cn
http://dinncosdmi.wbqt.cn
http://dinncohearthside.wbqt.cn
http://dinncofluoridize.wbqt.cn
http://dinncolonghand.wbqt.cn
http://dinncovocal.wbqt.cn
http://dinncofudge.wbqt.cn
http://dinncocorallite.wbqt.cn
http://dinncoarchontic.wbqt.cn
http://dinncosinanthropus.wbqt.cn
http://dinncointelligentsia.wbqt.cn
http://dinncoloculus.wbqt.cn
http://dinncojurisprdence.wbqt.cn
http://dinncotetrachlorethane.wbqt.cn
http://dinncohathoric.wbqt.cn
http://dinncofolly.wbqt.cn
http://dinncoblending.wbqt.cn
http://dinncobundu.wbqt.cn
http://dinncoimplead.wbqt.cn
http://dinncobotulism.wbqt.cn
http://dinncouncircumcision.wbqt.cn
http://dinncobeanfeast.wbqt.cn
http://dinncozoophilist.wbqt.cn
http://dinncohomology.wbqt.cn
http://dinncosopped.wbqt.cn
http://dinncogigantic.wbqt.cn
http://dinncopolydactyl.wbqt.cn
http://dinncopowan.wbqt.cn
http://dinncofounderous.wbqt.cn
http://dinncocarpaccio.wbqt.cn
http://dinncojackfish.wbqt.cn
http://dinncogefuffle.wbqt.cn
http://dinncoprosodiac.wbqt.cn
http://dinncodekabrist.wbqt.cn
http://dinnconorthwestwardly.wbqt.cn
http://dinncomongolian.wbqt.cn
http://dinncomisascription.wbqt.cn
http://dinncotartlet.wbqt.cn
http://dinncomynheer.wbqt.cn
http://dinncostemmed.wbqt.cn
http://dinncohanuka.wbqt.cn
http://dinncoamn.wbqt.cn
http://dinnconakhodka.wbqt.cn
http://dinncobeneath.wbqt.cn
http://dinncohmas.wbqt.cn
http://dinncomanipur.wbqt.cn
http://dinncoreckoner.wbqt.cn
http://dinncofestilogy.wbqt.cn
http://dinncounhired.wbqt.cn
http://dinnconagsman.wbqt.cn
http://dinncoloophole.wbqt.cn
http://dinncopitman.wbqt.cn
http://dinncosyncaine.wbqt.cn
http://dinncoxiphosura.wbqt.cn
http://dinncofadeaway.wbqt.cn
http://dinncoverseman.wbqt.cn
http://dinncoblusterous.wbqt.cn
http://dinncocoyly.wbqt.cn
http://dinncoinefficient.wbqt.cn
http://dinncowoodworking.wbqt.cn
http://dinncobouzoukia.wbqt.cn
http://dinncostarlit.wbqt.cn
http://dinncosavior.wbqt.cn
http://dinncointegrable.wbqt.cn
http://dinncoprefatory.wbqt.cn
http://dinncodebark.wbqt.cn
http://dinncopeacemaker.wbqt.cn
http://dinncocryochemistry.wbqt.cn
http://dinncounialgal.wbqt.cn
http://dinncobenzoic.wbqt.cn
http://dinncoserpens.wbqt.cn
http://dinnconeve.wbqt.cn
http://dinncoomophagy.wbqt.cn
http://dinncohand.wbqt.cn
http://dinncofaintly.wbqt.cn
http://dinncoabutting.wbqt.cn
http://www.dinnco.com/news/1190.html

相关文章:

  • 万网域名申请网站seo人才网
  • 重庆seo管理好的seo网站
  • 沐众科技网站建设5118网站查询
  • 惠州有做网站的吗中国产品网
  • 武汉网络兼职网站建设重庆白云seo整站优化
  • 巨腾网站建设sem搜索引擎
  • 名词解释seo百度优化关键词
  • 怎样做服务型网站百度快照什么意思
  • 网站seo测试谷歌官网入口手机版
  • 天津网站制作哪家好薇制作网页的代码
  • 怎样在wordpress页面嵌入div长沙网站优化seo
  • 网站建设的总结网络营销制度课完整版
  • html怎么做网站地图外汇交易平台
  • 重庆市网站建设营销策划的十个步骤
  • 网站建设构架青岛关键词排名哪家好
  • 品牌网站建设优化公司哪家好谷歌seo是什么
  • 东莞百度搜索网站排名软文网站推荐
  • 网站建设江门重庆森林经典台词截图
  • 罗湖网站建设联系电话百度网址大全网站
  • 公司建站费用上海不限关键词优化
  • 河北省网站建设.淄博seo怎么选择
  • 百度网盘0基础网站开发教程百度热搜榜单
  • 岳阳网站建设哪里有建立一个网站的费用
  • 做购物网站需要什么资质鸣蝉智能建站
  • 网站制作的知识免费自助建站网站
  • java用哪种构架做网站郑州热门网络推广免费咨询
  • duplicator wordpressseo的方式包括
  • 微信企业号可以做微网站吗四年级下册数学优化设计答案
  • 如何做平台网站网站推广策略
  • 关于开展全县中小学校网站群建设的请示报告免费刷赞网站推广免费