Java同步关键字的C#版本?
本文翻译自: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. 另外,请记住, synchronized
和lock
需要对一个对象进行操作。
#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
的实现,因为它会锁定this
或typeof(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#版本?相关推荐
- java同步关键字_Java中synchronized关键字修饰方法同步的用法详解
Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有 ...
- synchronized——java同步关键字
每一个对象都有一把独占锁.独占锁只限制线程对它的同步方法的访问,对非同步方法,独占锁没有意义. synchronized是java中解决同步问题的一个方法.synchronized可以用来修饰方法 ...
- java 同步块关键字_Java同步关键字,同步方法和块
java 同步块关键字 Java synchronized keyword is used in multithreading to create a code block that can be e ...
- 【线程同步】 Java 同步块(synchronized)详细说明
我们在java开发中常常用synchronized( 互斥锁)来进行同步,但是对于 synchronized关键字有那些用法,会产生什么样的效果却不一定清楚,下面将详细介绍synchronized在程 ...
- java的同步关键字_简单了解Java synchronized关键字同步
简单了解Java synchronized关键字同步 发布于 2021-1-13| 复制链接 摘记: synchronized synchronized可以用来同步块,同步方法.同步块可以用来更精确 ...
- java class 关键字_java关键字及其作用
一. 关键字总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface ...
- Java同步组件之CyclicBarrier,ReentrantLock
文章目录 Java同步组件概况 `CyclicBarrier`介绍 与`CountDownLatch`比较 相同点 不同点 `CountDownLatch`和`CyclicBarrier`的场景比较 ...
- 探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现]
探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现] https://www.ibm.com/developerworks/cn/java/j-lo-syn ...
- java同步关键词解释、synchronized、线程锁(Lock)
1.java同步关键词解释 21.1 synchronized synchronized是用来实现线程同步的!!! 加同步格式: synchronized( 需要一个任意的对象(锁) ){ 代码块中放 ...
最新文章
- linux文件删除漏洞,OpenStack Glance v1 API任意文件删除漏洞(CVE-2012-4573)
- c#window服务程序
- python如何打印时间,在python2.7中,如何提取和打印日期、时间和m
- C语言引用文件空格和换行,关于文件操作,碰到空格就换行
- tp5 ajax 返回数据正常状态码却为500
- 在Docker中运行SpringBoot程序
- 使用kotlin遇到的问题
- ​内核调试技巧--systemtap定位丢包原因
- Codeforces - 65D - Harry Potter and the Sorting Hat - 简单搜索
- view类不响应自定义消息_安卓平台如何给控件添加自定义操作?
- 周怎么换算成月_时间序列数据,只找到了周数据,怎么把它转化成月数据?
- python爬虫代理ip
- 【您有一封来自阿里云的邀请函】阿里云成都客户服务中心20+职位虚席以待,来吧,成就最好的自己!...
- oop 商品信息按商品名称查询 商品按价格排序 内含测试类
- 2020.7.6 -- Miller_Rabin和Pollard_Rho算法
- alook浏览器哪个好 夸克浏览器_简单搜索、X浏览器、夸克浏览器、Via极简移动浏览器,到底哪个最好用?...
- 3D 渲染和游戏引擎技术信息来源
- 怎么用计算机求logo,pclogo小海龟里帮我设计一个复杂图
- java计算机毕业设计昆明市人民医院血库管理系统源码+数据库+lw文档+系统
- 微博关注关系网络、转发关系网络制作
热门文章
- 使用Nemiver调试器来调试 C/C++ 程序
- Educational Codeforces Round 12 B. Shopping 暴力
- C++学习笔记(十二):重载函数
- Android View事件机制 21问21答
- 【转】Entity Framework教程
- 简单了解关于.net framework的一些常见问题
- 001 初学android开发,从搭建环境开始(jdk+eclipse+android sdk+windows7)
- centos的ftp和smb被防火墙挡住了
- Nginx安装,目录结构与配置文件详解
- Python办公自动化(二)|从Excel到Word