本文翻译自: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. 当莎士比亚遇见Google Flax:教你用​字符级语言模型和归递神经网络写“莎士比亚”式句子...
  2. 哪些情况是友情链接作弊?总结了11种方法!
  3. mysql和oracle转换_转MySql 与Oracle区别
  4. PHP+Mysql+jQuery实现发布微博程序--PHP篇
  5. Java调用浏览器打开指定页面的5种方法(最全)
  6. 6 功能4:文章详情页、点赞功能
  7. 开源中国翻译频道链接收藏
  8. python列表与集合
  9. python argparse 入门
  10. zookeeper3.3.6 伪分布式安装
  11. ActionScript3.0中获取变量类型的方法
  12. 网站服务器迁移域名怎么配置文件,记录网站服务器搬家如何迁移 Let’s Encrypt 证书 | 老左笔记...
  13. 上周AI热点回顾:AI“模拟”出暗物质、AI挖掘毕加索秘密、CPU在大型神经网络超越V100 GPU...
  14. 天天背单词--的设计与实现(一)
  15. html监控页面大小,JQuery实时监控窗口大小(无需插件)
  16. TCP之报文格式解析
  17. CISSP基本概念与常见名词
  18. excel行列互换_小白学Excel怎么做?|苦苦整理四小时!
  19. 细说中国各省省名的由来(zt)
  20. chm文件打不开的解决方法

热门文章

  1. HTML5的视频格式之争
  2. 中兴助力软银开启首次5G测试
  3. nopcommerce 开源商城
  4. iverilog+gtkwave 进行仿真
  5. Openstack api 使用方法
  6. JavaScript的类型转换(字符转数字,数字转字符)
  7. checkbox-复选框
  8. c#利用反射+特性实现简单的实体映射数据库操作类(表与类的映射)
  9. 093-PHP数组比较
  10. 20172310 《程序设计与数据结构》实验二报告