亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? processor.cs

?? 這是我寫的并行計算的作業(yè)
?? CS
?? 第 1 頁 / 共 2 頁
字號:
?using System;
using System.Collections;
using System.Threading;
using LoggingLib.Impl;

namespace WindowsApplication1
{
    /// <summary>
    /// This class sinulates a real processor in the PSRS algorithm.
    /// </summary>
    public class Processor
    {


        protected Processor(int segNum, int[] originalData)
        {
            this.mySegmentNumber = segNum;
            this.myOriginalData = originalData;
            this.mySamplesReady = new AutoResetEvent(false);
            this.GlobalSortedDataOk = new AutoResetEvent(false);
        }

        /// <summary>
        /// Some varirants are initlized here.
        /// </summary>
        private void initlize()
        {
            myGlobalChange = new Semaphore(0, this.ProcessorNumbers);
        }

        /// <summary>
        /// Creat processors that will sort the original datas.
        /// </summary>
        /// <param name="originalData">Original datas that will be sorted.</param>
        /// <param name="num">The number of processors that we want to create</param>
        public static void CreatProcessors(int[] originalData, int num)
        {

            
            if ((num * num) <= originalData.Length)
            {
                processors = new Processor[num];
                for (int i = 0; i < num; i++)
                {
                    processors[i] = new Processor(i, originalData);
                }
                if ((originalData.Length / num) != 0)
                {
                    Processor.countPerProcessor = originalData.Length / num + 1;
                }
                else
                {
                    Processor.countPerProcessor = originalData.Length / num;
                }
                Processor.mainCell = new int[num - 1];
                Processor.mainCellReady = new Semaphore(0, num);
                Processor.myGlobalSortedData = new MyArrayList<int>(originalData.Length);
                Processor.mySamplesNotHandled = true;
            }
            else
            {
                throw new ArgumentException("Create too many processors!");
            }
        }

        /// <summary>
        /// Start processors that have been create in CreatProcessors function.
        /// </summary>
        public static void StartProcessors()
        {
            if (processors != null)
            {
                for (int i = 0; i < processors.Length; i++)
                {
                    Thread t = new Thread(processors[i].Run);
                    t.Start();
                }
            }
        }

        /// <summary>
        /// Wait for sorted datas. Actually this function just waits for the last processor to send the sorted datas to myGlobalSortedData feilds.
        /// </summary>
        public static void WaitSortCompleted()
        {
            processors[processors.Length - 1].GlobalSortedDataOk.WaitOne();
        }

        /// <summary>
        /// Get the proper partitions that should be merge sorted by this processor first. Then sorted these partition with mergesort algorithm. 
        /// Then send the sorted datas to myGlobalSortedData and indicated next processor can send his datas.
        /// </summary>
        public void GlobalExchangeAndSort()
        {
            int[][] partitions = new int[this.ProcessorNumbers][];
            for (int i = 0; i < partitions.Length; i++)
            {
                Processor p = processors[i];
                partitions[i] = p.GetOnePartition(this.SegmentNumber);
                Logger.getInstance().debug(this.Name + " get one partition form " + p.Name);
            }
            int[] sortedData = this.MergeSort(partitions, 0, partitions.Length);
            if (this.SegmentNumber == 0)
            {
                myGlobalSortedData.AddRange(sortedData);
                Logger.getInstance().debug(this.Name + " has added sorted datas to global!");
                this.GlobalSortedDataOk.Set();
            }
            else
            {
                Processor pre = processors[this.SegmentNumber - 1];
                Logger.getInstance().debug(this.Name + " is waiting for " + pre.Name + " to complete its GlobalExchangeAndSort method!");
                pre.GlobalSortedDataOk.WaitOne();
                myGlobalSortedData.AddRange(sortedData);
                Logger.getInstance().debug(this.Name + " has added sorted datas to global!");
                this.GlobalSortedDataOk.Set();
            }
        }

        /// <summary>
        /// Selecte ProcessorNumbers Samples from the local data.
        /// </summary>
        /// <returns></returns>
        public int[] GetSamples()
        {
            this.mySamplesReady.WaitOne();
            int[] samples = new int[this.ProcessorNumbers];
            int delt = this.localData.Length / this.ProcessorNumbers;
            for (int i = 0; i < samples.Length; i++)
            {
                samples[i] = this.localData[delt * i];
            }
            return samples;
        }

        /// <summary>
        /// Return one partition whose partition index is partitionNumber
        /// </summary>
        /// <param name="partitionNumber">The partition index</param>
        /// <returns>The partition with right index</returns>
        public int[] GetOnePartition(int partitionNumber)
        {
            myGlobalChange.WaitOne();
            int startIndex = this.partitionFlags[partitionNumber];
            if (startIndex < 0 || startIndex >= this.localData.Length)
                return null;
            int length = 0;
            if (partitionNumber == (this.ProcessorNumbers - 1))
            {
                length = this.localData.Length - startIndex;
            }
            else
            {
                length = this.partitionFlags[partitionNumber + 1] - startIndex;
            }
            int[] partition = new int[length];
            for (int i = 0; i < length; i++)
            {
                partition[i] = this.localData[startIndex + i];
            }
            return partition;
        }

        /// <summary>
        /// First sort in the PSRS algorithm.
        /// </summary>
        public void LocalSort()
        {
            this.localData = this.Sort(this.myOriginalData, this.Start, this.Length);
            this.mySamplesReady.Set();
        }

        /// <summary>
        /// This method will merge proper arrays to a single sorted array.
        /// </summary>
        /// <param name="arrays">Arrays to be merged</param>
        /// <param name="start">The start array's index to be merged</param>
        /// <param name="length">The length of arrays to be merged</param>
        /// <returns>This array stores the sorted datas.</returns>
        public int[] MergeSort(int[][] arrays, int start, int length)
        {
            if (length < 0)
            {
                throw new ArgumentOutOfRangeException("Argument \"length\" must be greater than 0!");
            }
            if (start < 0 || start >= arrays.Length)
            {
                throw new ArgumentOutOfRangeException("Argument \"start\" is out of range!");
            }
            if (start + length > arrays.Length)
                length = arrays.Length - start;
            if (length == 1)
                return arrays[start];
            else if (length == 2)
            {
                return MergeSort(arrays[start], arrays[start + 1]);
            }
            else
            {
                int[] array1 = MergeSort(arrays, start, length / 2);
                int[] array2 = MergeSort(arrays, start + length / 2, length - length / 2);
                return MergeSort(array1, array2);
            }
        }

        /// <summary>
        /// Merge array1 and array2 to a sorted array(This method implements the merge sort algorithom)
        /// </summary>
        /// <param name="array1"></param>
        /// <param name="array2"></param>
        /// <returns>A sorted array</returns>
        public int[] MergeSort(int[] array1, int[] array2)
        {
            if (array1 == null)
                return array2;
            if (array2 == null)
                return array1;
            int[] result = new int[array1.Length + array2.Length];
            int i = 0;
            int j = 0;
            int k = 0;
            while (i < array1.Length && j < array2.Length)
            {
                if (array1[i] < array2[j])
                {
                    result[k] = array1[i];
                    i++;
                    k++;
                }
                else
                {
                    result[k] = array2[j];
                    j++;
                    k++;
                }
            }
            if (i < array1.Length)
            {
                Array.Copy(array1, i, result, k, array1.Length - i);
            }
            else

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一二三四区| 亚洲欧美成aⅴ人在线观看| 欧美久久久影院| 欧美日韩国产综合视频在线观看| 色综合视频一区二区三区高清| 99久久国产综合精品女不卡| 99久久精品情趣| 91国偷自产一区二区三区观看| 91日韩在线专区| 在线观看一区日韩| 欧美绝品在线观看成人午夜影视| 欧美日韩成人综合| 欧美一区二区国产| 久久精品欧美日韩精品| 欧美激情中文字幕| 亚洲精品美国一| 午夜欧美一区二区三区在线播放| 性久久久久久久| 免费日韩伦理电影| 国产成人精品免费一区二区| 丁香婷婷综合激情五月色| 成人丝袜视频网| 一本大道av一区二区在线播放| 欧美日韩亚洲综合| 精品久久久久久久人人人人传媒 | 亚洲精品视频在线看| 亚洲午夜久久久久久久久电影网 | 日韩一区二区三区视频在线| 欧美mv日韩mv亚洲| 亚洲国产高清aⅴ视频| 亚洲欧美日韩一区| 免费精品视频最新在线| 福利视频网站一区二区三区| 在线观看视频一区二区欧美日韩| 欧美一区二区三区爱爱| 中文一区二区完整视频在线观看| 亚洲一区二区视频在线观看| 裸体在线国模精品偷拍| 不卡一区二区三区四区| 欧美精品成人一区二区三区四区| 久久婷婷色综合| 一区二区视频在线| 蜜桃一区二区三区四区| caoporm超碰国产精品| 欧美精品三级日韩久久| 国产日韩欧美激情| 性感美女久久精品| 盗摄精品av一区二区三区| 欧美乱熟臀69xxxxxx| 中文字幕久久午夜不卡| 青娱乐精品视频在线| 99精品视频一区二区| 日韩精品一区二区在线| 亚洲精品中文字幕乱码三区| 欧美系列日韩一区| 国产性做久久久久久| 亚洲第一福利一区| 成人av中文字幕| 日韩欧美成人一区| 亚洲成人激情自拍| www..com久久爱| 久久青草国产手机看片福利盒子 | 国产综合久久久久影院| 精品视频资源站| 中文字幕日韩欧美一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| av毛片久久久久**hd| 精品粉嫩超白一线天av| 午夜av一区二区| 色婷婷久久99综合精品jk白丝| 精品国偷自产国产一区| 丝袜美腿高跟呻吟高潮一区| 91视视频在线观看入口直接观看www| 欧美精品一区二区三区久久久| 一区二区日韩av| 成人av在线影院| 国产欧美精品一区| 精品亚洲成a人在线观看 | 日本亚洲欧美天堂免费| 色域天天综合网| 中文字幕乱码久久午夜不卡| 激情深爱一区二区| 日韩一卡二卡三卡四卡| 香蕉久久夜色精品国产使用方法| 91女神在线视频| 亚洲欧洲三级电影| av网站免费线看精品| 国产精品午夜在线| 国产美女精品一区二区三区| 日韩欧美成人午夜| 蜜桃一区二区三区在线| 91精品国产aⅴ一区二区| 亚洲成人av电影| 欧美巨大另类极品videosbest| 亚洲午夜一区二区| 欧美日韩一区不卡| 亚洲国产成人高清精品| 欧美日韩中文字幕精品| 视频一区二区中文字幕| 欧美日韩一区二区三区四区| 亚洲五码中文字幕| 欧美电影影音先锋| 欧美午夜精品久久久久久超碰 | www.99精品| 国产精品国产成人国产三级| 不卡的电视剧免费网站有什么| 国产精品水嫩水嫩| 99国产精品99久久久久久| 亚洲天天做日日做天天谢日日欢 | 色综合久久久久| 一区二区三区在线视频免费| 欧美午夜精品久久久久久超碰 | 激情综合网av| 久久嫩草精品久久久精品| 国产精品一级在线| 中文字幕第一区第二区| 不卡的av中国片| 亚洲午夜国产一区99re久久| 91超碰这里只有精品国产| 麻豆极品一区二区三区| 国产日韩欧美综合在线| 波多野洁衣一区| 一区二区欧美国产| 欧美一卡二卡在线| 国产精品系列在线播放| 国产精品久久综合| 欧美影院午夜播放| 人人超碰91尤物精品国产| 久久久久久久久久电影| 91同城在线观看| 日本视频中文字幕一区二区三区| 精品国产成人系列| 91一区一区三区| 三级亚洲高清视频| 中文字幕精品在线不卡| 欧美在线看片a免费观看| 久久激情五月激情| 国产精品国产a级| 宅男噜噜噜66一区二区66| 国产福利一区二区三区视频| 一区二区三区在线播放| 欧美mv日韩mv亚洲| 日本道精品一区二区三区| 日产国产高清一区二区三区| 国产精品每日更新| 在线综合视频播放| eeuss鲁片一区二区三区在线看| 亚洲女同一区二区| 欧美xxxxxxxx| 欧美自拍丝袜亚洲| 国产成人一区二区精品非洲| 亚洲综合色婷婷| 国产日本欧美一区二区| 欧美午夜理伦三级在线观看| 国产成人综合网| 婷婷综合五月天| 亚洲私人黄色宅男| 26uuu另类欧美| 欧美日韩免费电影| youjizz久久| 国内精品久久久久影院薰衣草| 亚洲精品视频免费观看| 蜜桃av一区二区三区电影| 国产精品欧美一级免费| 欧美一区二区三区免费观看视频| 99国产精品久久| 国产麻豆精品在线观看| 五月天视频一区| 亚洲色图在线播放| 久久女同精品一区二区| 欧美一区二区视频网站| 91美女视频网站| 国产成人小视频| 老司机精品视频导航| 五月天激情综合网| 亚洲精品视频在线观看免费| 国产欧美视频一区二区| 精品国偷自产国产一区| 91精品国产欧美一区二区18| 一本色道综合亚洲| 成人免费毛片片v| 国产自产2019最新不卡| 免费成人在线网站| 亚洲成av人片一区二区三区| 亚洲精品久久嫩草网站秘色| 国产精品美女一区二区在线观看| 欧美精品一区二区三区四区| 日韩一区二区免费在线电影| 欧美男男青年gay1069videost| 91福利视频在线| 色呦呦国产精品| 色婷婷一区二区| 色呦呦日韩精品| 在线看国产一区二区| 色婷婷av一区二区三区gif| 99在线视频精品| av电影在线观看不卡| 成人免费高清在线| 成人免费视频网站在线观看| 成人一区二区三区中文字幕|