本文翻译自:C# version of java's synchronized keyword?

Does c# have its own version of the java "synchronized" keyword? c#是否具有自己的java“ synchronized”关键字版本?

Ie in java it can be specified either to a function, an object or a block of code, like so: 即在Java中,可以将其指定为函数,对象或代码块,如下所示:

public synchronized void doImportantStuff() {// dangerous code goes here.
}

or 要么

public void doImportantStuff() {// trivial stuffsynchronized(someLock) {// dangerous code goes here.}
}

#1楼

参考:https://stackoom.com/question/2Gmw/Java同步关键字的C-版本


#2楼

请注意,在完整路径下,该行: [MethodImpl(MethodImplOptions.Synchronized)]应该看起来像

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)]


#3楼

Does c# have its own version of the java "synchronized" keyword? c#是否具有自己的java“ synchronized”关键字版本?

No. In C#, you explicitly lock resources that you want to work on synchronously across asynchronous threads. 否。在C#中,您显式lock了要跨异步线程同步处理的资源。 lock opens a block; lock打开一个块; it doesn't work on method level. 它在方法级别上不起作用。

However, the underlying mechanism is similar since lock works by invoking Monitor.Enter (and subsequently Monitor.Exit ) on the runtime. 但是,底层机制是相似的,因为lock是通过在运行时调用Monitor.Enter (然后是Monitor.Exit )来实现的。 Java works the same way, according to the Sun documentation . 根据Sun文档 ,Java的工作方式相同。


#4楼

static object Lock = new object();lock (Lock)
{
// do stuff
}

#5楼

You can use the lock statement instead. 您可以改用lock语句。 I think this can only replace the second version. 我认为这只能替代第二个版本。 Also, remember that both synchronized and lock need to operate on an object. 另外,请记住, synchronizedlock需要对一个对象进行操作。


#6楼

First - most classes will never need to be thread-safe. 首先-大多数类将永远不需要是线程安全的。 Use YAGNI : only apply thread-safety when you know you actually are going to use it (and test it). 使用YAGNI :仅当您知道实际上将要使用它(并对其进行测试)时,才应用线程安全性。

For the method-level stuff, there is [MethodImpl] : 对于方法级的东西,有[MethodImpl]

[MethodImpl(MethodImplOptions.Synchronized)]
public void SomeMethod() {/* code */}

This can also be used on accessors (properties and events): 这也可以用于访问器(属性和事件):

private int i;
public int SomeProperty
{[MethodImpl(MethodImplOptions.Synchronized)]get { return i; }[MethodImpl(MethodImplOptions.Synchronized)]set { i = value; }
}

Note that field-like events are synchronized by default, while auto-implemented properties are not : 请注意,默认情况下,类似字段的事件同步的,而自动实现的属性则不是

public int SomeProperty {get;set;} // not synchronized
public event EventHandler SomeEvent; // synchronized

Personally, I don't like the implementation of MethodImpl as it locks this or typeof(Foo) - which is against best practice. 就我个人而言,我不喜欢MethodImpl的实现,因为它会锁定thistypeof(Foo) -这违反了最佳实践。 The preferred option is to use your own locks: 首选选项是使用您自己的锁:

private readonly object syncLock = new object();
public void SomeMethod() {lock(syncLock) { /* code */ }
}

Note that for field-like events, the locking implementation is dependent on the compiler; 注意,对于类似字段的事件,锁定实现取决于编译器。 in older Microsoft compilers it is a lock(this) / lock(Type) - however, in more recent compilers it uses Interlocked updates - so thread-safe without the nasty parts. 在较旧的Microsoft编译器中,它是一个lock(this) / lock(Type) -但是, 在较新的编译器中,它使用Interlocked更新-线程安全,没有讨厌的部分。

This allows more granular usage, and allows use of Monitor.Wait / Monitor.Pulse etc to communicate between threads. 这允许更精细的使用,并允许使用Monitor.Wait / Monitor.Pulse等在线程之间进行通信。

A related blog entry (later revisited ). 相关的博客条目 (后来重新访问 )。

Java同步关键字的C#版本?相关推荐

  1. java同步关键字_Java中synchronized关键字修饰方法同步的用法详解

    Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有 ...

  2. synchronized——java同步关键字

    每一个对象都有一把独占锁.独占锁只限制线程对它的同步方法的访问,对非同步方法,独占锁没有意义.   synchronized是java中解决同步问题的一个方法.synchronized可以用来修饰方法 ...

  3. java 同步块关键字_Java同步关键字,同步方法和块

    java 同步块关键字 Java synchronized keyword is used in multithreading to create a code block that can be e ...

  4. 【线程同步】 Java 同步块(synchronized)详细说明

    我们在java开发中常常用synchronized( 互斥锁)来进行同步,但是对于 synchronized关键字有那些用法,会产生什么样的效果却不一定清楚,下面将详细介绍synchronized在程 ...

  5. java的同步关键字_简单了解Java synchronized关键字同步

    简单了解Java synchronized关键字同步 发布于 2021-1-13| 复制链接 摘记:  synchronized synchronized可以用来同步块,同步方法.同步块可以用来更精确 ...

  6. java class 关键字_java关键字及其作用

    一. 关键字总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface ...

  7. Java同步组件之CyclicBarrier,ReentrantLock

    文章目录 Java同步组件概况 `CyclicBarrier`介绍 与`CountDownLatch`比较 相同点 不同点 `CountDownLatch`和`CyclicBarrier`的场景比较 ...

  8. 探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现]

    探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现] https://www.ibm.com/developerworks/cn/java/j-lo-syn ...

  9. java同步关键词解释、synchronized、线程锁(Lock)

    1.java同步关键词解释 21.1 synchronized synchronized是用来实现线程同步的!!! 加同步格式: synchronized( 需要一个任意的对象(锁) ){ 代码块中放 ...

最新文章

  1. linux文件删除漏洞,OpenStack Glance v1 API任意文件删除漏洞(CVE-2012-4573)
  2. c#window服务程序
  3. python如何打印时间,在python2.7中,如何提取和打印日期、时间和m
  4. C语言引用文件空格和换行,关于文件操作,碰到空格就换行
  5. tp5 ajax 返回数据正常状态码却为500
  6. 在Docker中运行SpringBoot程序
  7. 使用kotlin遇到的问题
  8. ​内核调试技巧--systemtap定位丢包原因
  9. Codeforces - 65D - Harry Potter and the Sorting Hat - 简单搜索
  10. view类不响应自定义消息_安卓平台如何给控件添加自定义操作?
  11. 周怎么换算成月_时间序列数据,只找到了周数据,怎么把它转化成月数据?
  12. python爬虫代理ip
  13. 【您有一封来自阿里云的邀请函】阿里云成都客户服务中心20+职位虚席以待,来吧,成就最好的自己!...
  14. oop 商品信息按商品名称查询 商品按价格排序 内含测试类
  15. 2020.7.6 -- Miller_Rabin和Pollard_Rho算法
  16. alook浏览器哪个好 夸克浏览器_简单搜索、X浏览器、夸克浏览器、Via极简移动浏览器,到底哪个最好用?...
  17. 3D 渲染和游戏引擎技术信息来源
  18. 怎么用计算机求logo,pclogo小海龟里帮我设计一个复杂图
  19. java计算机毕业设计昆明市人民医院血库管理系统源码+数据库+lw文档+系统
  20. 微博关注关系网络、转发关系网络制作

热门文章

  1. 使用Nemiver调试器来调试 C/C++ 程序
  2. Educational Codeforces Round 12 B. Shopping 暴力
  3. C++学习笔记(十二):重载函数
  4. Android View事件机制 21问21答
  5. 【转】Entity Framework教程
  6. 简单了解关于.net framework的一些常见问题
  7. 001 初学android开发,从搭建环境开始(jdk+eclipse+android sdk+windows7)
  8. centos的ftp和smb被防火墙挡住了
  9. Nginx安装,目录结构与配置文件详解
  10. Python办公自动化(二)|从Excel到Word