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

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(使用前将#替换为@)

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

随机推荐

  • 如何在 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因此 为了清楚起见 我将在这里