首页 > 系统相关 >互斥,同步,进程间通信和文件阻塞总结

互斥,同步,进程间通信和文件阻塞总结

时间:2022-12-11 20:33:36浏览次数:38  
标签:阻塞 间通信 互斥 优点 线程 缺点 自旋 CPU


互斥#########################

中断屏蔽***********************************

因为不能屏蔽其他CPU的中断,因此不能解决SMP多CPU引发的竞态,因为其他CPU也会引发竞争。

因此,单独使用中断屏蔽通常不是一种值得推荐的避免竞态的方法(换句话说,驱动中使用local_irq_disable/enable()通常意味着一个bug),它适合与下文将要介绍的自旋锁联合使用。


 

原子变量和原子位操作***********************************

优点:简单

缺点:只能实现对变量这种资源进行互斥,不能对其他类型的资源进行互斥。


 

自旋锁***********************************

自旋锁只有在内核可抢占或SMP(多处理器)的情况下才真正需要,在单CPU且不可抢占的内核下,自旋锁的所有操作都是空操作。

不是说在单CPU且不可抢占的内核下不可以用自旋锁,而是在同一时间内,没有其他程序跟你竞争临界资源,就算使用了自旋锁也无意义。


 

读写锁***********************************

 

顺序锁***********************************

读操作要读两次,如果两次相等就会就不会继续读,不相等就继续读。


信号量***********************************
优点:可以睡眠
缺点:如果没有获得信号量,马上睡眠,从睡眠到唤醒的时间段过长,不适合等待时间较短的程序。


互斥量:
优点:可以睡眠
缺点:暂时先等待一小段时间,如果没有获得互斥量再睡眠,这样更高效。

RCU机制
优点:适合对链表的操作,适合读多写少
缺点:由于有宽限期,所以等待所有的读结束需要时间


同步#########################

完成量:***********************************

适用于线程同步


条件变量:***********************************
条件变量其实是用于实现生产者和消费者的问题
消费者线程启动,获取互斥量读缓冲区,发现为空,阻塞自己并同时释放互斥量;生产者线程启动,获取互斥量写缓冲区,写完毕后,通知消费者同时释放互斥量;消费者线程唤醒,获取互斥量读缓冲区;
​​ 优点:可以实现生产者和消费者机制
缺点:要和互斥锁共同实现

 

 

应用层的同步总结:***********************************

互斥量:

优点:

1.适用于线程间的的读写会发生交互的情况

2.一旦互斥锁,上锁了,所有其他使用该锁的线程,都阻塞

缺点:

1.有可能发生死锁

2.锁解除了,不能及时通知其他线程

/*********************************************************************/

读写锁:

优点:

1.可以分读 锁和 写 锁,

2.可以用于,有些线程只读不写,或者只写不读的情况

3.可以最大效率的利用共享资源

缺点:

1.按照规则加上 读 锁后的线程,只应该进行 读 操作,但是我可以读也可以写,这回造成一些问题

2.读写锁会抛锚,有时能限制,有时不能限制,抛锚率 百分之三十

/*********************************************************************/

条件变量:

优点:

1.可以通知所有等待条件变量的线程,比互斥量效率高

2.完美解决了,互斥量要通过循环来判断,是否可以进行上锁操作,不浪费CPU

缺点:

1.需要互斥量结合,不能单独使用

******************************************************************/

自旋锁:

优点:

1.可以一直判断锁的情况,可以及时的上锁

2.可以用在非常需要最开的到所得情况

缺点:

1.由于,没有得到自旋锁的进程会不断循环检测锁,因此上了锁的进程要以最快的速度做完事情,

2.这也就限制了,这种锁不应该用在占用时间的多的进程

3.反应太快,使得它不适用于进行全局变量的读和写


/*********************************************************************/

屏障:

优点:

1.可以用于多个线程完成一个大的任务的情况

缺点:

1.只要一个线程没完成任务,其他线程都不能继续操作



 

 

 

 

 

 

标签:阻塞,间通信,互斥,优点,线程,缺点,自旋,CPU
From: https://blog.51cto.com/u_13267193/5928639

相关文章

  • Qt的进程间通信,以服务器的形式,手把手教你VS上进行Qt的COM、ActivedQt Server的开发,比
    Qt的进程间通信,以Active服务器的形式,手把手教你VS上进行Qt的COM、ActivedQtServer的开发,比保姆还保姆写在前面,文中的ID有部分对不上,因为我中途改了一下,我建议你在实际的......
  • [ Linux ] 进程信号递达,阻塞,捕捉
    1.coredump字段coredump在进程控制中进程等待部分,我们遗留了一个coredump字段,在waitpid中有一个status参数,该参数是一个输出型参数,其中status不能简单的当做整形来看待,我......
  • 信号量与互斥量的区别
    多任务间同步的方式包括关中断,调度器上锁,互斥量(mutex),信号量,消息队列几种,其中互斥量和信号量使用使用方式相近,连概念和实现都有些近似,所以没有扎实操作系统背景知识的......
  • 一文搞懂各种锁-互斥锁-自旋锁-可重入锁-读写锁-悲观锁-乐观锁-分布式锁
    原文网址:https://zhuanlan.zhihu.com/p/489305763一为什么会有锁机制1在多线程情况下共享操作同一个变量时,会导致数据不一致,出现并发安全问题,所以通过锁机制来保证数......
  • LWIP接收数据阻塞问题
    LWIP接收数据阻塞问题问题现象:LWIP大概运行一段时间反应就变慢,比如刚开始ping是<1ms,越到后面就越慢,接近3000ms以上。有人说内存泄漏的问题。也有人说是移植后驱动的问题......
  • java阻塞队列
    1.defBlockingQueue阻塞队列是mq的底层。BlockingQueue阻塞队列,排队拥堵,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示:2.实现类BlockingQueue阻......
  • 理解Nodejs中的进程间通信
    前置知识文件描述符在Linux系统中,一切都看成文件,当进程打开现有文件时,会返回一个文件描述符。文件描述符是操作系统为了管理已经被进程打开的文件所创建的索引,用来指......
  • 使用 Atomic 减少互斥锁与Atomic.Value
    看到medium的文章:https://medium.com/a-journey-with-go/go-how-to-reduce-lock-contention-with-the-atomic-package-ba3b2664b549点开一看发现居然需要vip...于是就去......
  • PostgreSQL会话及阻塞相关常用SQL
    ====PostgreSQL===========select*frompg_settings;selectversion(),txid_current(),pg_backend_pid(),current_user,current_schema,current_timestamp;--......
  • [C++11与并发编程]5、使用条件变量和互斥锁实现信号量
    使用条件变量和互斥锁实现信号量layout:posttitle:使用条件变量和互斥锁实现信号量categories:cpp_concurrencydescription:C++并发编程简介keywords:c++,并发编......