pthread_once与线程安全的单例模式

本文介绍了如何在多线程环境中使用pthread_once实现线程安全的单例模式,避免了double check locking的不确定性。通过pthread_once,确保在多个线程中只会执行初始化函数一次,同时给出了相应的测试示例和代码实现。
摘要由CSDN通过智能技术生成

pthread_once与线程安全的单例模式

在单例模式的class设计的时候,常常会看到一种写法:

if(xxx==NULL)
{
    LOCK();
    if(xxx==NULL)
    {
        xxx=new XXX();
    }
    return xxx;
}

这个办法叫做double check locking(缩写为DCL)。在《Linux多线程服务端》一书中,作者提出DCL已经靠不住,并提出了使用pthread_once来实现单例的线程安全。


pthread_once

#include <pthread.h>
int  pthread_once(pthread_once_t  *once_control,  void  (*init_routine) (void));

在多线程环境中,有些事仅需要执行一次。通常当初始化应用程序时,可以比较容易地将其放在main函数中。但当你写一个库时&

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值