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

电子商务网站建设具体方案网络推广的基本方法

电子商务网站建设具体方案,网络推广的基本方法,提供网站建设,wordpress首页文章截取文章目录 一些名词解释STL,智能指针和线程安全可重入VS线程安全常见锁的概念死锁 一些名词解释 临界资源 定义:临界资源是指在系统中一次仅允许一个进程访问的共享资源。这些资源可以是硬件资源(如打印机、磁带机等),也可以是软件…

文章目录

  • 一些名词解释
  • STL,智能指针和线程安全
  • 可重入VS线程安全
  • 常见锁的概念
    • 死锁




一些名词解释

  • 临界资源

    • 定义:临界资源是指在系统中一次仅允许一个进程访问的共享资源。这些资源可以是硬件资源(如打印机、磁带机等),也可以是软件资源(如共享数据结构、文件等)。
    • 特点:多个进程都可能需要访问临界资源,但在同一时刻只能有一个进程对其进行访问,否则可能会导致数据不一致或其他错误。例如,多个进程都要使用打印机打印文件,如果同时访问打印机,就会造成打印混乱。
  • 临界区

    • 定义:临界区是指进程中访问临界资源的那段代码区域。每个进程中访问临界资源的代码是临界区的一部分。
    • 作用:为了保证临界资源的互斥访问,进程在进入临界区之前需要进行一些检查和操作,以确保当前没有其他进程在临界区内访问该资源。当进程访问完临界资源后,需要离开临界区,以便其他进程能够访问。
  • 原子性

    • 定义:原子性是指一个操作或一组操作要么完全执行,要么完全不执行,不存在部分执行的情况。对于临界区的访问,通常要求具有原子性,即进程进入临界区的操作必须是原子的,要么成功进入,要么阻塞等待,不能出现中间状态。
    • 举例:比如银行转账操作,从账户 A 向账户 B 转账 100 元,这个操作包含从账户 A 扣款 100 元和向账户 B 加款 100 元两个子操作,这两个子操作必须作为一个整体执行,要么都成功,要么都失败,以保证数据的一致性和完整性。

  • 互斥

    • 定义:互斥是指多个进程在访问临界资源时的一种约束条件,即当一个进程正在访问某个临界资源时,其他进程必须等待,直到该进程访问结束并释放该资源后,其他进程才能访问。

  • 同步
    • 同步是一种协调多个执行单元(如线程或进程)的操作顺序和访问共享资源的机制,其主要目的是确保数据的一致性、避免数据竞争和解决资源争用问题。

STL,智能指针和线程安全


STL中的容器是否是线程安全
在 C++ 的标准模板库(STL)里,大部分容器并非线程安全的。STL 设计之初,并未将线程安全纳入考量。主要是为了避免在单线程环境中因线程安全机制带来不必要的开销。线程安全机制(像加锁操作)会影响性能,若在所有操作中都默认加入,会让单线程程序变慢。因此,STL 把线程安全的控制权交给了开发者。

  • 常见 STL 容器的情况
    • 顺序容器:例如 std::vector、std::list、std::deque 等,它们不具备线程安全特性。要是多个线程同时对这些容器进行读写操作,就可能出现数据竞争的问题,导致程序出现未定义行为。例如,一个线程正在遍历 std::vector,而另一个线程同时对其进行插入或删除元素的操作,就可能破坏容器的内部结构。
    • 关联容器:像 std::map、std::set 以及它们的无序版本 std::unordered_map、std::unordered_set 等,同样不是线程安全的。多个线程同时对这些容器进行修改或访问,可能会引发数据不一致或迭代器失效等问题。
    • 容器适配器:如 std::stack、std::queue、std::priority_queue 等,也不保证线程安全。多个线程并发操作这些容器时,可能会产生竞态条件。

智能指针是否是线程安全

智能指针是否线程安全不能一概而论,需要根据具体的智能指针类型以及操作情况来分析:
std::unique_ptr

  • 常规操作:std::unique_ptr 用于独占对象的所有权,不允许拷贝,只支持移动语义。从设计上来说,std::unique_ptr 本身并不是为多线程环境设计的,其常规的操作(如对象的创建、移动、析构等)不是线程安全的。因为多个线程同时对同一个 std::unique_ptr 进行操作(例如一个线程尝试移动它,另一个线程尝试访问它所管理的对象)会导致数据竞争和未定义行为。
  • 线程安全场景:如果多个线程不共享同一个 std::unique_ptr 实例,而是各自持有独立的 std::unique_ptr 实例,那么在每个线程内部对其进行操作是安全的。

std::shared_ptr

  • 引用计数操作:std::shared_ptr 的引用计数操作是线程安全的。std::shared_ptr 内部使用原子操作来管理引用计数,这意味着多个线程可以同时对同一个 std::shared_ptr 进行引用计数的增加或减少操作,而不会出现数据竞争。例如,多个线程可以同时复制同一个 std::shared_ptr 实例,引用计数会正确地更新。
  • 管理对象的访问:虽然引用计数操作是线程安全的,但对 std::shared_ptr 所管理的对象的访问不是线程安全的。如果多个线程同时访问和修改 std::shared_ptr 所指向的对象,就需要额外的同步机制(如互斥锁)来保证线程安全。

std::weak_ptr

  • std::weak_ptr 是一种不控制所指向对象生命周期的智能指针,它是为了配合 std::shared_ptr 而引入的,用于解决循环引用问题。std::weak_ptr 本身的操作(如创建、赋值、检查是否过期等)是线程安全的,因为它依赖于 std::shared_ptr 的原子引用计数机制。但同样,对 std::weak_ptr 所指向对象的访问也需要额外的同步机制来保证线程安全。

智能指针的线程安全特性因类型而异,并且即使某些操作是线程安全的,对其所管理对象的访问通常也需要额外的同步措施。


可重入VS线程安全


概念

  • 线程安全:多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。
  • 重入:同一个函数被不同的执行流调用,当前一个流程还没有执行完,就有其他的执行流再次进入,我们称之为重入。一个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数被称为可重入函数,否则,是不可重入函数

常见的线程不安全的情况

  • 不保护共享变量的函数
  • 函数状态随着被调用,状态发生变化的函数
  • 返回指向静态变量指针的函数
  • 调用线程不安全函数的函数

常见的线程安全的情况

  • 每个线程对全局变量或者静态变量只有读取的权限,而没有写入的权限,一般来说这些线程是安全的
  • 类或者接口对于线程来说都是原子操作
  • 多个线程之间的切换不会导致该接口的执行结果存在二义性

常见不可重入的情况

  • 调用了malloc/free函数,因为malloc函数是用全局链表来管理堆的
  • 调用了标准I/O库函数,标准I/O库的很多实现都以不可重入的方式使用全局数据结构
  • 可重入函数体内使用了静态的数据结构

常见可重入的情况

  • 不使用全局变量或静态变量
  • 不使用用malloc或者new开辟出的空间
  • 不调用不可重入函数
  • 不返回静态或全局数据,所有数据都有函数的调用者提供
  • 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据

可重入与线程安全联系

  • 函数是可重入的,那就是线程安全的
  • 函数是不可重入的,那就不能由多个线程使用,有可能引发线程安全问题
  • 如果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的。

可重入与线程安全区别

  • 可重入函数是线程安全函数的一种
  • 线程安全不一定是可重入的,而可重入函数则一定是线程安全的。
  • 如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生死锁,因此是不可重入的。

常见锁的概念


死锁

死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。

死锁四个必要条件

  • 互斥条件:一个资源每次只能被一个执行流使用
  • 请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件:一个执行流已获得的资源,在末使用完之前,不能强行剥夺
  • 循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系

避免死锁

  • 破坏死锁的四个必要条件
  • 加锁顺序一致
  • 避免锁未释放的场景
  • 资源一次性分配
http://www.dtcms.com/wzjs/91429.html

相关文章:

  • 晋江网站建设价格百度小说搜索排行榜
  • 怎么用idea做响应式网站促销策略的四种方式
  • 怎么样做国外推广网站sem培训班学费哪个好
  • 用服务器建立网站吗百度平台商家我的订单查询
  • 网站开发 私活百度推广哪家做的最好
  • 做网站建设公司网络营销和网络销售的关系
  • 建设凡科网站百度关键词搜索排名
  • wordpress关闭评论长沙网站seo收费标准
  • 直销公司排名表网站的优化seo
  • 照片网站怎么做seo案例模板
  • 优秀定制网站建设案例长沙全网覆盖的网络推广
  • wordpress新用户注册网站推广seo
  • 吉林建设厅网站首页百度网址链接
  • 手机网站专题化工网站关键词优化
  • 在线网站生成器中国销售网
  • 网站建设辶金手指排名十五营销和销售的区别在哪里
  • php做网站多少钱定制网站和模板建站
  • 网站建设 军报学网络营销好就业吗
  • 个人做医疗类网站违法?营销策划公司名称
  • 新闻自动采集网站源码模板建站的网站
  • 阜宁做网站找哪家好怎么搭建网站
  • 网站设计到底做多宽日照网络推广公司
  • 文山知名网站建设报价公司网站建设服务
  • 自己做电台直播的网站昆山seo网站优化软件
  • 中国网站制作企业排行榜武汉网站开发公司seo
  • 深圳哪里可以做物流网站如何关闭2345网址导航
  • wordpress网站公告google手机官网
  • wordpress 网站图标通过百度指数不能判断出
  • 乐清做网站建设网站排名优化公司哪家好
  • 国内网站建设公司排名网站关键词seo费用