问题描述
如题!就是如何保证几个线程访问并修改一个全局值类型变量不发生冲突。
解决方案
解决方案二:
本帖最后由 bdmh 于 2014-08-26 14:07:03 编辑
解决方案三:
单个值类型变量本来就是原子操作,线程安全
解决方案四:
用lock对变量读写加锁,而lock其实就是monitor的语法糖。对于简单变量,用Interlocked可以实现相同的作用,并且提高性能,因为它基于操作系统和硬件的实现。
解决方案五:
除了简单类型,值类型的访问并非是原子操作,比如:structAddress{publicstringCountry{get;set;}publicstringCity{get;set;}}这里就要考虑对象状态的原子性问题了,如果我们要更改一个地址,而只更改了国家,没有更改城市,那么此时对象的状态是不正确的。当然,我们最好把它设计成构造函数一次性赋值,而属性只读的,从设计上保持它的原子性。比如DateTime,你就不能更改它的属性,而通过AddHoursAddDays都会返回一个新的对象。
解决方案六:
他问的是一个全局值类型对象,应该就是指简单对象吧而你的例子已经不能算一个对象了吧,这是多个对象封装成结构体了...
解决方案七:
引用2楼Z65443344的回复:
单个值类型变量本来就是原子操作,线程安全
longl;l=123456789;//32位机器上不安全,因为需要分开写高32位和低32位inti;i++;//不安全,因为有多个操作,读出,加一,写入structA{publicintI1;publicintI2;publicintI3;}Aa=b;//结构(值类型)不安全,同样因为需要多个操作。
解决方案八:
学习了...
时间: 2024-12-04 20:22:04