如何锁定多个线程中使用的变量

2024-03-19

我在这里问了一个很糟糕的问题在多个线程中锁定变量 https://stackoverflow.com/questions/4081986/lock-on-a-variable-in-multiple-threads因此,为了清楚起见,我将在这里提出这个问题,并希望我能正确地提出这个问题。

classA
  creates instance of classB
  has methodA that can update & uses classB's myVar
  has methodB that can update & uses classB's myVar

classB
  has a variable myVar

方法和方法 B 都可以在单独的线程中运行(在主线程中的新线程中调用)。我如何确保这是线程安全的?


Use the lock关键字来保护可由多个线程同时执行的代码。

public class ClassA
{
  private ClassB b = new ClassB();

  public void MethodA()
  {
    lock (b)
    {
      // Do anything you want with b here.
    }
  }

  public void MethodB()
  {
    lock (b)
    {
      // Do anything you want with b here.
    }
  }
}

重要的是要注意lock不保护或锁定语句中使用的对象实例。相反,该对象被用作识别代码段的一种方式,如果另一个部分使用该对象,则应阻止执行该代码段。same对象实例已经在执行。换句话说,您可以在中使用任何您喜欢的对象实例lock声明,并且访问成员仍然是安全的ClassB.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何锁定多个线程中使用的变量 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 我们可以使用 x86_64 CPU 原子在 PCI Express 上生成复合原子操作吗?

    如您所知 从2 0版本开始 PCI Express支持复合原子操作 FetchAdd Swap CAS https pcisig com sites default files specification documents ECN Ato
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 如何在 Ruby 中迭代内存中的 zip 文件

    我正在编写一个单元测试 其中一个测试返回一个 zip 文件 我想检查该 zip 文件的内容 从中获取一些值 并将这些值传递给下一个测试 我正在使用 Rack Test 所以我知道我的 zip 文件的内容在里面last response bo
  • 未进行任何更改时 Git 合并冲突

    我克隆了一个存储库 然后几个小时后 我创建了 git pull 然而 出现了合并冲突 我不明白为什么 因为我没有对克隆存储库进行任何更改 git status On branch master Your branch is up to da
  • 我可以用PIL全屏显示图像吗?

    如何使用Python图像库全屏显示图像 from PIL import Image img1 Image open colagem3 png img1 show 全屏模式显示 问题的核心 PIL没有全屏打开图像的本机方法 这是有道理的 它不
  • C++ 字符串流跳过一个字符

    我有一个文件 第一行显示为 gt FileName txt 我的目标是读取这一行 并将 FileName txt 保存到名为 name 的变量中 所以我有 ifstream file File opening stuff string li
  • 动态 dll 加载和 googletest

    我有几个基于 MFC 的项目 DLL 我想在里面添加一些 GTest GMock 测试 我需要以最小的努力做到这一点 所以我的计划是 将测试文件添加到每个库并将其链接到 gmock lib 准备一个可执行文件 它将使用最少的 main 动态
  • 动态数据 - 创建友好的列名称?

    我使用实体框架模型创建了一个动态数据项目 效果很好 但是 现在它显示了我的所有数据库表以及数据库列名称 这并不总是最友好的 例如address line 1 我如何才能提供这些将显示给最终用户的更友好的列标题 您应该使用元数据类来添加附加注
  • 没有权限在Windows上删除SQLite3开发数据库Rails 5.0

    我正在尝试在 Windows 上重置 Rails 5 0 项目的开发数据库 但是当我运行时 与 rake db drop 相同 rails db drop 我收到以下错误 Errno EACCES 权限被拒绝 unlink internal
  • sql避免笛卡尔积

    我对 SQL 还很陌生 并且正在努力处理查询 使用 Access FWIW 我在 Google 上搜索过 StackOverflow 但还没有看到这种确切的场景 这也可能是因为我不知道正确的搜索词 我有两个非常简单的表 其中包含相似的数据
  • Sql索引与全表扫描

    在编写复杂的 SQL 查询时 我们如何确保使用正确的索引并避免全表扫描 我通过确保只加入具有索引 主键 唯一键等 的列来做到这一点 这够了吗 向数据库询问查询的执行计划 然后从那里继续 不要忘记对 where 子句中出现的列也建立索引
  • 自动加载器导致找不到类

    我正在尝试在我的 WordPress 项目中包含一个自动加载器 更具体地说 我正在开发一个插件 其中包含所有类的 Classes 目录 我希望这些类可以通过命名空间访问到我的 WordPress 项目根目录和子文件 文件夹 我觉得我的com
  • iPhone Chrome 上的 ICS 文件下载失败并显示“未知文件类型”

    我有一个 php 脚本 可以为移动网络应用程序自动生成 ics 文件 在我的 Win7 桌面上使用 Chrome ics 文件下载得很好 Outlook 也喜欢它 在我的 iPhone 上使用 Safari ics 文件会按预期打开日历应用
  • 模拟 Fn+F11 按键

    Can you tell me how I can simulate key presses Fn F11 on a laptop Do I have to write a driver or something like that 平台是
  • 如何将浮动操作按钮带到应用程序之外并使其作为可见、可移动和可点击的后台服务运行?

    所以我需要我的应用程序有一个开关 当它打开时 应该创建一个 FAB 在主活动 应用程序关闭后 这应该像后台服务一样在所有其他应用程序上运行 因此 无论我触摸 FAB 的任何地方 它都应该是可点击 可移动的 并且应该覆盖所有应用程序 看看以下
  • 自定义 Django Rest 解析器

    这是我的代码 class lista libros APIView def post self request format None format None cadena64 request data xmlfile base64 b64
  • 如何通过将文件/文件夹“拖放到”脚本图标上来将路径名传递给 Python 脚本

    我在 Mac OS X 中工作 一直在用 Python 编写简单的文件 文件夹复制脚本 有没有办法将文件夹拖放到 Python 脚本图标顶部 并将文件或文件夹的路径作为脚本中的参数传递 目前 我有一个 AppleScript Droplet
  • 换行时居中 div(当它不适合在线时)

    我正在尝试仅使用 CSS 创建此布局 当标题合适时 当标题不合适时 右边的 btn 如果换行的话应该居中 我试过这个 container width 100 border 1px solid grey padding 5px block p
  • 非常规年份的 DateTime.ParseExact

    我正在尝试使用单个格式字符串读取以下格式的日期 1000 12 31 999 12 31 99 12 31 这些对应于公元 1000 年 公元 999 年和公元 99 年的日期 我尝试过以下格式字符串 yyyy M d 这对于 999 和
  • 通用的单个sql查询

    我有一个这样的表 id roll no name 1 111 Naveed 2 222 Adil 3 333 Ali 如果我有这样的数据 fields array id roll no and values array 1 111 2 22
  • WinSCP 以自动化模式向服务器进行身份验证,使用公钥身份验证

    我正在使用 WinSCP 自动复制到服务器的过程 并且仅使用用户名和密码进行身份验证 脚本是 open username password ipaddress portno hostkey
  • 如何锁定多个线程中使用的变量

    我在这里问了一个很糟糕的问题在多个线程中锁定变量 https stackoverflow com questions 4081986 lock on a variable in multiple threads因此 为了清楚起见 我将在这里