当一个类正在构造时在构造函数中将this泄露给了其它对象,这在单线程串行执行情况下可能没有什么问题,但是在多线程下那么问题就比较大了。比如线程1负责构造这个对象A但是在构造函数中将this指针泄露给了其它线程所调用的对象B,不巧的是其它线程所调用的对象B看见A有些不爽将其析构了。那么最后A自以为一切构造好了返回,线程1然后对这个A操作,最后可怕的错误(比如段错误)无穷无尽的折磨线程1......
模拟这个问题:假设有一个人A,餐馆B,A没钱就去餐馆B点菜吃饭,单线程模式下:A进入餐馆点菜->餐馆B炒菜(不辞辛劳)->A吃完了没钱付->餐馆B大为光火.....此后出现了一幕CATV不会报道的事件.......
但是聪明的餐馆B现在学聪明了,也会利用高科技了,利用某种技术可以检测到用户是否有钱(比如和银行通奸哈哈)从而开启了个后台进程检测客户没钱立马轰走.....那么问题变成如下:
线程1:客人A进入餐馆B点菜,点菜这个操作这里强加为:A将this指针泄露给了B
线程2:餐馆B发现有客人来了->获取该客人的信息(这里是this指针)->通过科学技术发现客户没钱->不准厨房炒菜了,立马暴打客户一顿
在这种模式下显然客户不可能吃完饭再挨揍了.....这就是泄露this指针的可怕之处,我还没有构造好,其它线程就把我给干掉了....我以后还咋活啊???
#include<iostream>
#include<unistd.h>
#include<pthread.h>
#include<assert.h>
using