美文网首页
互斥锁的使用

互斥锁的使用

作者: aspmcll | 来源:发表于2017-11-07 23:26 被阅读0次

pthread_mutex_t _mutex
pthread_cond_t _cond

- (void)mutexInit {
  pthread_mutex_init(&_mutex,NULL);
  phtread_cond_init(&_cond,NULL);
}
-(void)mutexWait {
  pthread_mutex_lock(&_mutex);
  pthread_cond_wait(&_cond,&_mutex);
  pthread_mutex_unlock(&_mutex) ;
} 
- (void)mutexSingal {
  pthread_mutex_lock(&_mutex);
  pthread_cond_singal(&_cond);
  pthread_mutex_unlock(&_mutex);
}

条件锁需要和互斥锁配合使用,如果在没有mutex,在调用wait还没有进入wait状态,如果另一个线程执行了singal则会导致该次singal丢失,因此需要与一个互斥锁配合使用


关于原子操作

原子操作表示一条不可打断的操作,也就是说线程在执行的时候不会被操作系统挂起,而是会一定执行完成,在多处理器的环境下,一条汇编指令显然就是一条原子操作,因为中断也需要通过指令控制。
在多处理器环境下,能够被多个处理器同时操作的指令仍然算不上原子操作,因此真正的原子操作必须有硬件层提供,比如x86平台上如果在指令前面加上lock前缀,对应的机器码在执行时会把总线锁住,使得其他cpu不能再执行相同的操作,从而从硬件层面保证了操作的原子性。

相关文章

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • 多线程 -线程安全

    线程安全隐患 资源共享 解决数据错乱问题使用互斥锁互斥锁使用格式: @synchronized(锁对象) { //...

  • go-day5

    sync包 sync.Mutex 互斥锁 适用于并发访问公共资源的场景。 声明互斥锁 使用互斥锁 sync.RWM...

  • iOS面试题与核心基础之线程同步(锁,串行队列,信号量,@syn

    锁 iOS多线程锁有两类 自旋锁 和 互斥锁自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。资源已...

  • @synchronized 的原理探究

    使用 @synchronized (递归互斥锁) Objective-C 代码中动态创建互斥锁的便捷方式。该 @...

  • Linux下同步机制——互斥量的使用

    1.初始化互斥量 2.互斥量的使用 3.销毁互斥锁

  • 071-JAVA线程安全的同步锁方案【阻塞】

    1.互斥锁 使用互斥锁对象保证临界区内代码的原子性。 同步代码块的锁:需要显式指定锁对象。 同步方法的锁:默认锁对...

  • iOS重识

    1synchronized(互斥锁) 互斥锁,就是使用了线程同步技术,多条线程按顺序地执行任务 使用场景:多条线程...

  • C链表

    互斥锁:链表用在多线程中保证顺序,多个线程会操作同一个链表,互斥锁保证多线程操作的安全,互斥锁分情况使用,链表并不...

  • go day11 互斥锁、读写锁

    互斥锁: 其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再次对其进...

网友评论

      本文标题:互斥锁的使用

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