WEB开发网
开发学院图形图像Flash Silverlight(26) - 2.0线程之Lock, Interlocked, ... 阅读

Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute

 2008-12-31 11:53:44 来源:WEB开发网   
核心提示:本文源代码下载地址:http://flashview.ddvip.com/2008_12/Silverlight.rar介绍Silverlight 2.0使用Lock, Interlocked, EventWaitHandle, Monitor来实现线程同步Lock - 确保代码块完成运行,而不会被其他线程中断Inte

本文源代码下载地址:

http://flashview.ddvip.com/2008_12/Silverlight.rar

介绍

Silverlight 2.0使用Lock, Interlocked, EventWaitHandle, Monitor来实现线程同步

Lock - 确保代码块完成运行,而不会被其他线程中断

Interlocked - 为多个线程共享的变量提供原子级的操作

EventWaitHandle - 通知其他线程是否可入的类

Monitor - 提供同步访问对象的机制

ThreadStaticAttribute - 所指定的静态变量对每个线程都是唯一的

示例

1、Lock.xaml

<UserControl x:Class="Silverlight20.Thread.Lock"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel HorizontalAlignment="Left" Margin="5">
    <TextBlock x:Name="txtMsg" />
  </StackPanel>
</UserControl>

Lock.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace Silverlight20.Thread
{
  public partial class Lock : UserControl
  {
    // 需要被 lock 的静态变量
    private static readonly object objLock = new object();
    private static int i;
    public Lock()
    {
      InitializeComponent();
      i = 0;
      for (int x = 0; x < 100; x++)
      {
        // 开 100 个线程去操作静态变量 i
        System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
        thread.Start();
      }
      System.Threading.Thread.Sleep(3000);
      // 3 秒后 100 个线程都应该执行完毕了,取得 i 的结果
      // 做了并发处理的结果为 100 ,去掉 lock 可得到不做并发处理的结果
      txtMsg.Text = i.ToString();
    }
    private void DoWork()
    {
      try
      {
        // lock() - 确保代码块完成运行,而不会被其他线程中断。其参数必须为一个引用类型的对象
        lock (objLock)
        {
          int j = i + 1;
          // 模拟多线程并发操作静态变量 i 的情况
          System.Threading.Thread.Sleep(10);
          i = j;
        }
      }
      finally
      {
        // code
      }
    }
  }
}

1 2 3 4 5  下一页

Tags:Silverlight 线程 Lock

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接