美文网首页
iOS 互斥锁

iOS 互斥锁

作者: 萧城x | 来源:发表于2017-04-20 14:21 被阅读195次

多线程读写的时候 如何保证的数据的准确性?

线程同步

导入
<pre>

import <pthread.h>

</pre>

初始化
<pre>
pthread_mutex_init(&_lock, NULL);
</pre>

初始化
<pre>
pthread_mutex_destroy(&_lock);
</pre>

<pre>
pthread_mutex_t _lock;_YYLinkedMap *_lru;dispatch_queue_t _queue;
</pre>

_lock是互斥所,当涉及多线程执行代码的情况下,通过pthread_mutex_lock(&_lock)方法给下面的代码块加互斥锁,这样其它线程会被阻塞,直到
<pre>
pthread_mutex_unlock(&_lock)被调用。如下:
pthread_mutex_lock(&_lock);
//代码块1
pthread_mutex_unlock(&_lock);
pthread_mutex_lock(&_lock);
//代码块2
pthread_mutex_unlock(&_lock);
</pre>

线程A执行代码块1,线程B执行代码块2,如果线程A先执行代码块1,_lock被锁住,这样线程B被阻塞,直到线程A执行完代码块1后,调用pthread_mutex_unlock(_lock),线程B开始执行代码块2。由于执行缓存的操作很容易涉及到多线程调用,所以需要通过pthread_mutex_lock来控制,关于各种锁性能的测试,YYCache的作者ibireme大神在他的博客中进行了阐述。

YYCache通过在方法中添加互斥所的逻辑,来保证多线程操作缓存时数据的同步。例如在setObject:forKey:withCost:方法和objectForKey:中添加代码:

<pre>

  • (void)setObject:(id)object forKey:(id)key withCost:(NSUInteger)cost {
    pthread_mutex_lock(&_lock);
    //操作链表,写缓存数据
    pthread_mutex_unlock(&_lock);
    }
  • (id)objectForKey:(id)key {
    pthread_mutex_lock(&_lock);
    //访问缓存数据
    pthread_mutex_unlock(&_lock);
    }
    </pre>

相关文章

网友评论

      本文标题:iOS 互斥锁

      本文链接:https://www.haomeiwen.com/subject/bxllzttx.html