百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

多线程同步手段几种方式的总结(blocking mechanism)

citgpt 2024-08-01 13:31 9 浏览 0 评论


1. mutex - 通常用来解决data race,但是对于那种order级别的race condition不好解决。线程具有唯一性,即lock他才有资格unlock他

多线程同步手段几种方式的总结(blocking mechanism)

2. semaphore - 既可以解决data race又可以解决race condition,但是如果仅仅只有data race,不建议使用信号量。和mutex不同,没有唯一性,各个线程都可以对其进行release

3. condition variable - 主要用来解决race conditions(ordering),需要和mutex配合使用。


PS:

这里也有几个关于多线程出现问题的术语:

1. Deadlock(死锁) - A wait B, B wait A

2. Starvation(挨饿) - 某个线程一直在等某个信号量,但是每次信号量唤醒都给了更高优先级的其他线程,导致这个线程一直在等

3. Spurious wake-ups - 来源于条件变量condition variables的实现,因此在使用条件变量的时候,都会多一步去check此时的唤醒是否真的来自于condition variable

4. Priority inversion(优先级反转) - 较高优先级的线程在wait比较低优先级的resource,这样就会让用户困惑。比如对于声卡来说播放音乐很重要(高优先级),但如果你让他去等待一个微不足道的UI显示(低优先级),这就会造成这个问题


这几种操作其实都是类似blocking机制,他会让你的你的线程进入到睡眠。然而随着多线程的发展,现在出现了一种实现方式可以让你的线程不进行sleep从而加快你程序的整个处理速度。这个一般通过atomic primitives & lock-free data structures来实现。

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: