实例构造函数设置静态成员,线程安全吗?

2023-12-31

我正在重构一些代码,并且想知道如何使用lock在实例构造函数中。

public class MyClass {

    private static Int32 counter = 0;
    private Int32 myCount;

    public MyClass() {

        lock(this) {
            counter++;
            myCount = counter;
        }
    }
}

请确认

  1. 实例构造函数是线程安全的。
  2. lock 语句防止访问该代码块,而不是静态“计数器”成员。

如果原始程序员的意图是让每个实例知道其“计数”,那么我将如何同步对“计数器”成员的访问以确保另一个线程不会新建MyClass并在设置计数之前更改计数?

仅供参考 - 这个类不是单例类。实例必须简单地知道它们的数量。


如果您只增加一个数字,则有一个特殊的类(Interlocked)用于此目的......

http://msdn.microsoft.com/en-us/library/system.threading.interlocked.increment.aspx http://msdn.microsoft.com/en-us/library/system.threading.interlocked.increment.aspx

互锁增量法

以原子操作的形式递增指定变量并存储结果。

System.Threading.Interlocked.Increment(myField);

有关线程最佳实践的更多信息...

http://msdn.microsoft.com/en-us/library/1c9txz50.aspx http://msdn.microsoft.com/en-us/library/1c9txz50.aspx

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

实例构造函数设置静态成员,线程安全吗? 的相关文章

  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 如何在建立上下文时设置连接超时-PrincipalContext

    using PrincipalContext ctx new PrincipalContext ContextType Domain Domain UserName Password UserPrincipal U new UserPrin
  • 有关shared_ptr的竞态条件示例

    为什么没有竞争条件代码片段 https godbolt org z nEYPYqdqK below include
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • 为什么 xcode IDE 认为 `friend` 是保留字

    我一直在开发一个个人项目 并在我创建的新类中包含以下代码 property readonly getter isFriend BOOL friend 它似乎没有任何问题 当我构建它时 它可以编译得很好 但是当我们在xcode IDE看起来像
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • 对象变空似乎是 Hangfire 中的反序列化问题

    Hangfire 似乎无法反序列化我的原始版本Scheduler对象及其所有状态 我正在调用其 Execute 方法BackgroundJob Enqueue 如下所示 Scheduler new FileInFileOut FileIn
  • 如何通过分解 y 轴来减小 mschart 的高度

    如何降低 mschart 的高度 如下所示 编辑 就我而言 我不想查看中断图表 this chart1 ChartAreas 0 AxisY ScaleBreakStyle Enabled false 您似乎正在寻找AxisY ScaleB
  • 为什么 C# 中的命名空间允许循环依赖?

    在 c 中 您可以在文件 a cs 其命名空间为 MyApp A 中拥有一条语句 using MyApp B 而文件 b cs 其名称空间为 MyApp B 已经包含该语句 using MyApp A 如果类似的依赖关系存在于不同的 dll
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 结构大小与 typedef 版本不同?

    我的代码中有以下结构声明和 typedef struct blockHeaderStruct bool allocated unsigned int length typedef struct blockHeaderStruct block
  • Web 应用程序似乎启动了名为 [22] 的线程,但未能停止它。这很可能造成内存泄漏

    我有一个 Web 应用程序 后端有 Servlet 部署在 tomcat 上 该应用程序是简单的java应用程序 我经常在服务器日志中看到此错误 严重 Web 应用程序似乎启动了一个名为 22 但未能阻止它 这很有可能 造成内存泄漏 是否存
  • 在for循环中声明和初始化变量

    可以简单写一下吗 for int i 0 代替 int i for i 0 在 C 或 C 中 并且会变量i只能在循环内部访问 它在 C 中有效 它在 C 的原始版本中是不合法的 但在 C99 中被采用为 C 的一部分 当时一些 C 功能被
  • 如何正确处置注入的DLL线程?

    我将一个 DLL 注入到目标进程中 以在玩 MMORPG 时充当助手 当前功能将按键转换为鼠标点击 因为 MMORPG 要求用户移动鼠标才能实现某些功能 这是我所鄙视的 假设我出于某种原因想要取消注入 DLL 我该怎么做呢 这个方法干净吗
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web
  • 将二进制长字符串转换为十六进制 C#

    我正在寻找一种将长二进制字符串转换为十六进制字符串的方法 二进制字符串看起来像这样 0110011010010111001001110101011100110100001101101000011001010110001101101011 我
  • 在派生类中访问基类变量

    class Program static void Main string args baseClass obj new baseClass obj intF 5 obj intS 4 child obj1 new child Consol
  • 获取线段上最接近另一个点的点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想找到线段AB上最接近另一个点P的点 我的想法是 Get a1 and b1由直线公式y1 a1x b1 使用 A 点

随机推荐

  • 将范围传递给 AngularJS 上的服务

    我对 AngularJS 还很陌生 我想将范围传递给服务 这样我就可以根据scope value 执行标签搜索 div div div div
  • 扩展和集群 JPA

    我正在 jboss7 上构建一个常规 Java EE 应用程序 该应用程序将在数据层中使用 JPA 我想让这个应用程序随着负载的增加而扩展 虽然如何扩展 Web 层非常清楚 创建更多机器并将它们放在负载均衡器后面 但扩展数据层却不太清楚 我
  • 识别一般保护故障 (x86) 上的故障地址

    我正在尝试为 x86 上的一般保护错误 GP 13 编写 ISR 我无法从 INTEL 文档中找出如何找出导致异常的错误地址 我知道对于页面错误异常 GP 14 cr2 寄存器保存错误地址 任何帮助表示赞赏 我在这里所做的所有参考资料均来自
  • 客户端和服务器需要使用相同的端口进行连接吗?

    我有一个使用java的服务器客户端程序 我尝试创建一个ServerSocket有端口和客户端Socket具有不同的端口 并且它们无法相互连接 客户端抛出ConnectException 当我将 Client 上的套接字更改为与 Server
  • PHP 中的重定向/返回检查

    我有一个用 PHP 运行的网站 并且有一个页面 例如 confirm php 我只想允许登陆的用户确认 php 来自我指定的页面 例如 register php 我可以知道是否可以实现这一点 问候 安迪 你不能依赖HTTP 引用因为用户可以
  • 如何检测 Xamarin 表单 TabbedPage 中是否触摸了选项卡

    如何检测 Xamarin 表单 TabbedPage 中是否触摸了选项卡 这与我想出如何检测的页面更改检测不同 原因如下 我正在尝试解决一个相当丑陋的选项卡式页面溢出用户界面 标签栏右侧显示的丑陋的滚动条 每当有 gt 5 个选项卡时 因此
  • Apps 脚本 - 将 JSON 正确导出到 Google Sheet

    我对 Apps Script Javascript 还很初学者 我有一些使用 API 导出的 JSON 数据 以下是我这样做时得到的结果 console log jsonData 我试图 将此 JSON 数据转换为 CSV 将数据放入活动电
  • 杀死 Mac OSX 端口 80 上未知的自重启服务器

    我有一台服务器在端口 80 上运行 但我不知道它是什么或它来自哪里 当我跑步时 sudo lsof i 80 grep LISTEN I get httpd 80 root 5u IPv6 0x91f5a9de62859cfd 0t0 TC
  • 在 WHERE 子句中使用 CASE

    我的查询的简化版本 SELECT FROM logs WHERE pw correct AND CASE WHEN id lt 800 THEN success 1 ELSE END AND YEAR timestamp 2011 这是行不
  • NSDateFormatter 用于 BST 而不是 GMT+1

    我想在时间轴上显示以下字符串 格林威治标准时间 英国夏令时 这是代码 NSDateFormatter dateformatter NSDateFormatter alloc init dateformatter setDateFormat
  • 存储在单个向量中的三角形邻接矩阵的正向和逆向索引

    我有一张带有点的地图 我想知道每个点之间的距离 这可能称为无向循环图 由于点很多 我的存储空间有限 所以阵列需要很密集 对于 4 个城市 n 4 我需要 6 个索引来映射这 4 个城市 Index City1 lt gt City2 Ind
  • 推送到接口类型数组

    我有一个名为 TestEvent 类型的 rows 的数组 并且想要推送到该数组 我无法输出我推送的对象 它仅显示未定义 正如您所看到的 this rows 显示了数组 但是当我尝试输出特定数组 this rows 0 时 我得到了未定义
  • 有没有办法测试jqGrid是否有数据?

    我正在尝试启用和禁用 jqgrid 上的自定义按钮 但仅当网格为空时才启用该按钮 然后在网格不为空时禁用该按钮 有没有办法测试网格是否有数据 Thanks 您可以测试一下网格中有多少条记录 如果没有行 则网格为空 jQuery grid j
  • 修改我的.jar程序的任务栏图标

    我试图更改每次运行 jar 程序时出现在任务栏中的默认 java 图标 我设法用frame setIconImage img 更改它但这使得图标太小 我希望它与其他程序图标一样大并且具有高质量 我有什么办法可以做到这一点吗 谢谢 由于您只提
  • Android:使用“连续”自动对焦录制视频

    我从事视频录制工作 除了要求持续专注之外 一切正常 这就是我所做的 在surfaceCreated和surfaceChanged中都尝试过但没有成功 camera Camera open camera setPreviewDisplay h
  • JavaFX WebView 中的缓存

    我们正在开发一个JavaFX 2 x 应用程序 它需要提供一些GIS 支持 我们得出的结论是 通过嵌入式 WebView 使用 GoogleMaps 是最快的选择 问题是每次我们的应用程序启动时 都会下载相应的 JavaScript 库 这
  • 为什么 Scripts.Render 会调用 JsMinify.Process?

    我介绍了我的ASP NET MVC应用程序 我看到一个奇怪的函数调用 你可以在图片上看到它 总是当 mvc 渲染布局时我们调用system web optimization scripts render哪个调用JsMinify Proces
  • SQL Server 用户实例中的哪些内容导致它们无法在非 Express Edition 中使用?

    开发了几年 或更长时间 后 我仍然不明白 What makes User Instances impossible incompatible with Developer or any other edition of SQL Server
  • 读取中间件.Net Core中的Controller和Action名称

    我正在我的项目中编写一个中间件类 以便将请求数据记录到我们的数据库中 我没有看到任何简单的方法来获取控制器名称和操作 有机会在核心中轻松做到这一点吗 我有这样的事情 public class RequestResponseLoggingMi
  • 实例构造函数设置静态成员,线程安全吗?

    我正在重构一些代码 并且想知道如何使用lock在实例构造函数中 public class MyClass private static Int32 counter 0 private Int32 myCount public MyClass