ios-多线程访问共享资源

来源:互联网 发布:js里面怎么让div隐藏 编辑:程序博客网 时间:2024/06/05 17:55

什么是共享资源,一块资源可能会被多个线程去共享,也就是多个线程可能会去访问同一块资源,也就是共享这一块资源。

比如说多线程去访问同一个对象,同一个变量,同一个文件。

当多个线程访问同一块资源的时候,很容易引发数据的错乱和数据的安全问题。

这个时候我们在一个线程在访问那块资源的时候,我们需要把它个锁起来,这样在这个线程访问的时候,不允许那个线程访问就可以了。

我们应该怎么去加锁?任意一个对象内部都有一个锁,默认这把锁是打开的,进去之后,锁就会关上,只要在这里面的代码执行完毕之后,才会再次打开。我们只需要在下面这个代码块中写代码就可以了。这把锁其实就是互斥锁。这个互斥锁就是为了让线程同步执行,就是让线程按顺序执行。

 @synchronized (self) {                    }
加上锁会影响程序的性能。使用互斥锁的时候锁定的代码越少越好,互斥锁能有效的防止因为多线程抢夺资源造成的数据安全问题。
互斥锁的原理:

每一个对象的内部都有一个锁,当有线程要进入的synchronized到代码中会先去检查对象的锁是打开还是关闭状态,默认的是打开的状态,如果线程执行到代码块的内部会先去加锁,如果锁已经关闭了,又有线程要去执行代码块就要先去等待,等锁打开之后才会再去执行。

加锁之后程序执行的效率比不加锁的时候低,因为线程先要等待上一个线程先结束把锁先打开才能再去执行。锁保证了线程同时操作全局变量的安全性。