程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 一個C#多線程的工作隊列

一個C#多線程的工作隊列

編輯:C#入門知識

 自己寫了一個多線程的工作隊列,能夠實現對隊列中對象的自動處理。多線程添加元素到隊列中,隊列根據綁定

的事件進行自動處理,可以設置WorkSequential屬性來實現對隊列處理的單線程(嚴格順序處理)或者多線程處理(循序出隊,但是

多線程處理,不保證對隊列元素的處理順利)的選擇。

 

  源碼:

 

\\代碼
/***********多線程的工作隊列***************
* 此工作隊列保證線程安全性
*
*
*
*
* *******/
namespace WorkQueue
{
using System.Collections.Generic;
using System;
using System.Threading;

public delegate void UserWorkEventHandler<T>(object sender, WorkQueue<T>.EnqueueEventArgs e);
public class WorkQueue<T>
{
private bool IsWorking; //表明處理線程是否正在工作
private object lockIsWorking = new object();//對IsWorking的同步對象


private Queue<T> queue; //實際的隊列
private object lockObj = new object(); //隊列同步對象





/// <summary>
/// 綁定用戶需要對隊列中的item對象
/// 施加的操作的事件
/// </summary>
public event UserWorkEventHandler<T> UserWork;

public WorkQueue(int n)
{
queue = new Queue<T>(n);
}

public WorkQueue()
{
queue = new Queue<T>();
}

/// <summary>
/// 謹慎使用此函數,
/// 只保證此瞬間,隊列值為空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
lock (lockObj)
{
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved