• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

NET并行(多核)编程系列之七 共享数据问题和解决概述(3)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:

3.隔离:我们不共享数据,让每个task都有一份自己的数据拷贝。

4.同步:通过调整task的执行,有序的执行task。

注意:同步和以前多线程中的同步,或者数据库操作时的同步概念不一样

3. 顺序的执行的解决方案

顺序的执行解决了通过每次只有一个task访问共享数据的方式解决了数据竞争的问题,其实在本质上,这种解决方案又回到了之前的单线程编程模型。如果拿之前的party分蛋糕的例子,那么现在就是一次只能允许一个人去拿蛋糕。

数据不变解决方案

数据不变的解决方案就是通过让数据不能被修改的方式来解决共享数据竞争。如果拿之前的蛋糕为例子,那么此时的情况就是:现在蛋糕只能看,不能吃。

在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();

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1978130638@qq.com ,  QQ