程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 大量數據轉錄的多線程和同步處理實現(1)

大量數據轉錄的多線程和同步處理實現(1)

編輯:關於C語言

項目中需要對兩個不同格式的存儲設備進行數據轉錄,因為數據量非常大,所以時間非常緩慢;解決 方案是使用ReaderWriterSlim類建立一個共享的同步數據,可以支持一個線程讀取外部設備,向同步數據 寫入;多個線程從同步數據中讀取,轉換格式,然後寫入到本地設備。

本例中采用Queue<T>作為存放數據的集合,寫入線程向它的尾部寫入對象,讀取線程從它的頭 部獲取對象。

需要注意的是,由於Queue會拋棄已處理的對象,所以在同步數據隊列中無法驗證數據對象的唯一性, 被寫入的數據庫需要去掉唯一約束,或在寫入時向數據庫請求驗證。

首先定義一個讀寫接口:

namespace Common
{
    public interface IReaderWriter<T>
    {
        T Read(int argument);
        void Write(int arugment, T instance);
        void Delete(int argument);
        void Clear();
    }
}

然後實現一個隊列的讀寫器:

namespace Common
{
    public class QueueReaderWriter<T> : IReaderWriter<T>
    {
        private Queue<T> queues;
        public QueueReaderWriter()
        {
            queues = new Queue<T>();
        }
        public QueueReaderWriter(int capacity)
        {
            queues = new Queue<T>(capacity);
        }
        #region IReadWrite<T> 成員
        public T Read(int argument)
        {
            return queues.FirstOrDefault();
        }
        public void Write(int arugment, T instance)
        {
            queues.Enqueue(instance);
        }
        public void Delete(int argument)
        {
            queues.Dequeue();
        }
        public void Clear()
        {
            queues.Clear();
            queues.TrimExcess();
        }
        #endregion
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved