96SEO 2026-02-19 16:45 7
单例设计模式又分懒汉式和饿汉式#xff0c;同时对于懒汉式在多线程并发的情况下存在线程安全问题

单例设计模式使用的频率比较高整个项目中某个特殊的类对象只能创建一个
单例设计模式又分懒汉式和饿汉式同时对于懒汉式在多线程并发的情况下存在线程安全问题
饿汉式类加载的准备阶段就会将static变量、代码块进行实例化最后只暴露一个public方法获得实例对象。
懒汉式当需要用到的时候再去加载这个对象。
这时多线程的情况下可能存在线程安全问题
对于饿汉式这里不做具体的解释本节只讨论多线程与懒汉式的线程安全问题
将类指针对象进行静态私有化并且在类外初始化这个对象为空静态能保证的是这个对象属于这个类不属于任何一个对象
对外暴露一个public方法获取该对象如果在获取时发现该对象为空那么进行实例化否则直接返回
首先在单例类内部进行私有化一个内部类对外暴露的public获取instance的对象接口在new实例化对象的时候创建一个内部类静态成员内部类静态成员的好处是只有一份当作用域结束时内部类就会负责析构掉主类的静态成员对象
{public:~inner_class(){if(Single_Instance::instance){delete
Single_Instance::instance;Single_Instance::instance
单例模式的对象可能会被多个线程使用但是又必须保证这个单例的对象只有一份
不能重复创建、也必须保证这个对象在多线程使用过程中不会因为创建而产生数据安全问题即多线程抢占的创建这一个对象
{public:~inner_class(){if(Single_Instance::instance){delete
Single_Instance::instance;Single_Instance::instance
Single_Instance::get_Instance();std::cout
mythread1(thread_func);std::thread
mythread2(thread_func);std::thread
mythread3(thread_func);std::thread
mythread4(thread_func);mythread1.join();mythread2.join();mythread3.join();mythread4.join();
}可以看到实例化不止一个单例对象这一现象违反了单例的思想因此需要在多线程抢占创建时进行互斥mutex
使用互斥量的方式对线程访问获取对象进行阻塞但是不难发现问题其实这个对象只创建一次之后的访问单纯的获取这个对象也要进行加锁逐个排队访问临界区这一现象导致效率极低
*get_Instance(){std::unique_lockstd::mutex
uniqueLock(mutex_lock);if(instance
首先在锁外面加入一个if判断判断这个对象是否存在如果存在就没有必要上锁创建直接返回即可如果对象不存在首选进行加锁然后在if判断对象是否存在这个if的意义在于当多个线程阻塞在mutex锁头上时突然有一个线程1创建好了那么阻塞在mutex锁头上的线程2、3、4…都不用再继续创建因此在加一个if判断
volatile关键字的作用是防止cpu指令重排序重排序的意思就是干一件事123的顺序cpu可能重排序为132
1分配内存空间、2执行构造方法初始化对象、3将这个对象指向这个空间
由于程序运行CPU会进行指令的重排序如果执行的指令是132顺序A线程执行完13之后并没有完成对象的初始化、而这时候转到B线程B线程认为对象已经实例化完毕、其实对象并没有完成初始化产生错误
NULL){std::unique_lockstd::mutex
uniqueLock(mutex_lock);if(instance
但volatile关键字并不跨平台而在C11中提供了一种新的标准来解决这一问题并且跨平台可以通过atomic原子类来保证
将对象声明为原子类的指针std::atomic_thread_fence(std::memory_order_acquire)获取内存屏蔽的屏障关闭reorderstd::atomic_thread_fence(std::memory_order_release)将instance对象创建完毕之后进行解开内存屏障instance.store(tmp,
std::memory_order_relaxed)将对象store到内存中。
private:std::atomicSingle_Instance*
*get_Instance(){Single_Instance
instance.load(std::memory_order_relaxed);std::atomic_thread_fence(std::memory_order_acquire);if(tmp
NULL){std::unique_lockstd::mutex
instance.load(std::memory_order_relaxed);if(tmp
Single_Instance();std::atomic_thread_fence(std::memory_order_release);instance.store(tmp,
std::memory_order_relaxed);}}return
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback