当前位置:C++技术网 > 资讯 > 在多线程中,如何安全地操作同一个对象指针呢

在多线程中,如何安全地操作同一个对象指针呢

更新时间:2016-08-05 10:20:20浏览次数:1+次

在多线程中,如何安全地操作同一个对象指针呢

C++技术网解答:

    多线程编程中,涉及到最多的就是临界资源访问的问题。所谓的临界资源,指的是,多个线程会共享操作的东西,包括文件、数值变量、指针、类对象、对象指针、内核对象等等。

    临界资源的访问可以发生在多线程中,也可以发生在单线程的递归调用中。因为一个数据,大家都来操作,结果会导致操作的结果和状态可能随时被改变,因此可能造成混乱。比如说,看电视。多人看电视,拿到遥控器的也就控制了资源,可以随便换台。如果没有规则,大家随时都可以从一个人的手中抢走遥控器换台,结果在短时间内,好像大家都换过台,结果就是,一分钟内可能换了几十个台,这样的结果还能好好看电视吗?当然不能了。

    同样,操作对象指针也是如此。如何安全的操作同一个对象指针,也就是安全的操作临界资源,我们对资源形成保护,互斥访问即可。一般我们可以使用资源锁,一旦一方得到了资源,就要给资源加上锁,这样其他人就没法操作了。等这个人用完了,就解锁,这样其他人就可以用了。你可以想象超市的寄存柜,就是一个临界资源。你要想安全的使用其中一个柜子,就要在占有后锁上。用完后扫码解锁,释放资源。多个线程都要遵循这样的规则,才能保持有效运作。如果某一个线程不安分,就是要搞破坏,那也没有办法安全操作。

超市的寄存柜

    至于具体如何去安全操作,这个方法很多。在《Windows核心编程》书中的线程同步章节有很多方法,包括用户态的同步和内核态的同步,所以不在这里列举,只指一个方向。