task1,task2都要得到它,然后进行运算
在之前的图示例讲解中,balance那个属性就好比蛋糕,因为task1,task2都要得到它,然后进行运算。当我们来让多个task共享一个数据时就可能出现问题。下面列出了四种解决方案: 1. 顺序执行:也就是让第一个task执行完成之后,再执行第二个。 2. 数据不变:我们让task不能修改数据。 3. 隔离:我们不共享数据,让每个task都有一份自己的数据拷贝。 4. 同步:通过调整task的执行,有序的执行task。 注意:同步和以前多线程中的同步,或者数据库操作时的同步概念不一样 3.顺序的执行的解决方案 顺序的执行解决了通过每次只有一个task访问共享数据的方式解决了数据竞争的问题,其实在本质上,这种解决方案又回到了之前的单线程编程模型。如果拿之前的party分蛋糕的例子,那么现在就是一次只能允许一个人去拿蛋糕。 4.数据不变解决方案 数据不变的解决方案就是通过让数据不能被修改的方式来解决共享数据竞争。如果拿之前的蛋糕为例子,那么此时的情况就是:现在蛋糕只能看,不能吃。更多内容http://rajojia.blog.51cto.com
在C#中,可以同关键字 readonly 和 const来声明一个字段不能被修改: public const int AccountNumber=123456; 被声明为const的字段只能通过类型来访问:如,上面的AccountNumber是在Blank类中声明的,那么访问的方式就是Blank. AccountNumber
readonly的字段可以在实例的构造函数中修改。 如下代码:
using System; class ImmutableBankAccount { public const int AccountNumber = 123456; public readonly int Balance;
public ImmutableBankAccount(int InitialBalance) { Balance = InitialBalance; } public ImmutableBankAccount() { Balance = 0; } }
class App { static void Main(string[] args) { // create a bank account with the default balance ImmutableBankAccount bankAccount1 = new ImmutableBankAccount();
Console.WriteLine("Account Number: {0}, Account Balance: {1}", ImmutableBankAccount.AccountNumber, bankAccount1.Balance); // create a bank account with a starting balance
ImmutableBankAccount bankAccount2 = new ImmutableBankAccount(200); Console.WriteLine("Account Number: {0}, Account Balance: {1}", ImmutableBankAccount.AccountNumber, bankAccount2.Balance); // wait for input before exiting Console.WriteLine("Press enter to finish");
Console.ReadLine(); } }健康知识了解胆总管结石手术

浙公网安备 33010602011771号