java的同步关键字_Java同步关键字的C#版本?

418837dc7bb710ca84cf6bf8fa04b8f7.png

撒科打诨

首先-大多数类将永远不需要是线程安全的。使用YAGNI:仅当您知道实际上将要使用它(并对其进行测试)时,才应用线程安全性。对于方法级的东西,有[MethodImpl]:[MethodImpl(MethodImplOptions.Synchronized)]public void SomeMethod() {/* code */}这也可以用于访问器(属性和事件):private int i;public int SomeProperty{    [MethodImpl(MethodImplOptions.Synchronized)]    get { return i; }    [MethodImpl(MethodImplOptions.Synchronized)]    set { i = value; }}请注意,默认情况下,类似字段的事件是同步的,而自动实现的属性则不是:public int SomeProperty {get;set;} // not synchronizedpublic event EventHandler SomeEvent; // synchronized就我个人而言,我不喜欢实现MethodImpl它的锁定this或typeof(Foo)-这是违反最佳做法的。首选选项是使用您自己的锁:private readonly object syncLock = new object();public void SomeMethod() {    lock(syncLock) { /* code */ }}注意,对于类似字段的事件,锁定实现取决于编译器。在较旧的Microsoft编译器中,它是lock(this)/ lock(Type)-但是,在较新的编译器中,它使用Interlocked更新-因此线程安全而没有讨厌的部分。这允许更精细的使用,并允许使用Monitor.Wait/ Monitor.Pulseetc在线程之间进行通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值