C++多线程服务器端编程(一)

线程安全 就是多个线程访问同一个对象时
多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。

1.1.3节中所谓一个线程安全的counter示例,每个counter对象有自己的mutex,因此不同的对象不构成锁争用lock contention
同时执行也没关系,只要他们不是访问同一个counter对象 ,也就是说不同对象他们是有各自的lock的, 但是另一种condition下,如果counter是动态创建的并通过指针来访问,前面的对象销毁时的race condition就还存在 ,因为指针访问的话就是同一个lock

1.2 对象的创建很简单
对象构造要做到线程安全 唯一的要求就是在构造期间不要泄露this指针
• 不要在构造函数中注册任何回调;
• 也不要在构造函数中把this 传给跨线程的对象;
• 即便在构造函数的最后一行也不行。

就是说在构造函数里的话它对象还没有完成初始化 如果他this被泄露给其他对象 别的线程就有可能访问这个半成品对象,不安全,不可取
可以接受的做法是 先构造 然后需要使用回调函数的话 用一个成员函数来定义 届时再去调用它即可

class Foo : public Observer
{
   
public:
Foo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值