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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? processor.cs

?? 這是我寫(xiě)的并行計(jì)算的作業(yè)
?? CS
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
?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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区美女| 久久综合色之久久综合| 日韩欧美国产综合在线一区二区三区| 日韩欧美你懂的| 日本一区二区成人| 亚洲一区二区三区三| 精品中文av资源站在线观看| 99久久免费精品高清特色大片| 色噜噜夜夜夜综合网| 日韩欧美一区电影| 国产精品欧美久久久久无广告 | 成人成人成人在线视频| 欧美视频中文一区二区三区在线观看| 精品久久一区二区| 亚洲精品视频在线| 激情综合色播激情啊| 色婷婷国产精品| 欧美v亚洲v综合ⅴ国产v| 亚洲免费在线观看视频| 久久疯狂做爰流白浆xx| 一本一道久久a久久精品| 欧美电视剧在线看免费| 亚洲主播在线观看| 丁香婷婷综合激情五月色| 在线不卡欧美精品一区二区三区| 亚洲国产成人私人影院tom| 日本不卡视频在线| 在线观看视频欧美| 国产精品久久久久久久久久久免费看| 日本亚洲电影天堂| 日本高清无吗v一区| 国产性色一区二区| 免费精品99久久国产综合精品| 91免费小视频| 国产精品免费久久久久| 精品午夜久久福利影院| 欧美老人xxxx18| 一区二区三区在线视频观看| 国产成人欧美日韩在线电影| 日韩视频免费观看高清完整版| 曰韩精品一区二区| 成人免费三级在线| 国产亚洲精品7777| 极品尤物av久久免费看| 91精品麻豆日日躁夜夜躁| 一区二区国产视频| eeuss鲁一区二区三区| 久久久久久久久久美女| 蓝色福利精品导航| 日韩一区二区免费视频| 香蕉影视欧美成人| 欧美日韩中文一区| 亚洲国产日日夜夜| 色狠狠一区二区| 日韩美女视频一区二区| 波多野洁衣一区| 国产精品免费视频观看| 福利一区二区在线观看| 国产香蕉久久精品综合网| 国产麻豆一精品一av一免费| 精品国产1区2区3区| 日本伊人色综合网| 欧美一区二区三区视频在线观看| 亚洲国产视频一区二区| 欧美性猛片aaaaaaa做受| 亚洲一区免费观看| 欧美午夜电影网| 亚洲国产日韩av| 欧美日韩卡一卡二| 五月天中文字幕一区二区| 欧美精品在线观看一区二区| 亚洲成a人在线观看| 欧美人妖巨大在线| 日本欧美大码aⅴ在线播放| 日韩午夜小视频| 蜜臀av一区二区| 精品成人在线观看| 国产精品123区| 国产精品视频麻豆| 91蜜桃在线免费视频| 亚洲激情在线激情| 欧美男男青年gay1069videost | 日韩亚洲国产中文字幕欧美| 久久精品国产精品青草| 精品国产乱码久久久久久夜甘婷婷 | 大尺度一区二区| 亚洲欧洲精品一区二区三区| 91丨porny丨户外露出| 一区二区三区**美女毛片| 欧美丰满少妇xxxbbb| 麻豆一区二区三区| 精品国偷自产国产一区| 国产很黄免费观看久久| 亚洲免费av观看| 91精品国产综合久久福利| 国产揄拍国内精品对白| 中文字幕一区二区三区乱码在线| 在线观看一区日韩| 麻豆国产精品官网| 欧美国产1区2区| 欧美系列日韩一区| 精品一区二区在线播放| 国产欧美精品一区aⅴ影院| 91小宝寻花一区二区三区| 午夜精品久久久久影视| 精品国产免费一区二区三区香蕉| 成人久久视频在线观看| 亚洲成人自拍网| 久久日一线二线三线suv| 91亚洲精品久久久蜜桃| 免费美女久久99| 国产精品久久久久久久裸模| 欧美日韩国产在线观看| 国产剧情一区二区| 亚洲激情一二三区| 欧美精品一区二区三区视频| 一本色道**综合亚洲精品蜜桃冫| 日本午夜精品一区二区三区电影| 欧美国产禁国产网站cc| 在线观看91精品国产入口| 国产一区二区91| 亚洲观看高清完整版在线观看| 久久久久久久久久久久久女国产乱| 91丨九色丨蝌蚪富婆spa| 精品一区二区三区视频在线观看| 国产精品国产精品国产专区不蜜| 91精品国产入口| 99精品视频一区| 韩国成人在线视频| 亚洲一区日韩精品中文字幕| 国产欧美日本一区视频| 91麻豆精品91久久久久久清纯 | 亚洲欧美日韩系列| 精品欧美乱码久久久久久1区2区| 91性感美女视频| 国产精品正在播放| 男女视频一区二区| 一区二区在线电影| 国产日本欧洲亚洲| 3atv一区二区三区| 一道本成人在线| 从欧美一区二区三区| 久久99国内精品| 日韩国产高清影视| 一区二区三区日本| 日本一区二区三区在线不卡| 日韩精品中文字幕在线一区| 欧美在线视频你懂得| www.99精品| 国产成人av电影免费在线观看| 美女高潮久久久| 天堂影院一区二区| 亚洲尤物视频在线| 亚洲摸摸操操av| 亚洲欧洲精品天堂一级| 久久久99精品久久| 欧美成人性福生活免费看| 欧美精品在线观看一区二区| 在线视频综合导航| 91免费观看视频| 99re热视频这里只精品| 国产成a人亚洲| 国产经典欧美精品| 国产资源精品在线观看| 免费成人在线视频观看| 三级久久三级久久久| 午夜在线电影亚洲一区| 亚洲线精品一区二区三区| 伊人色综合久久天天| 亚洲素人一区二区| 综合久久国产九一剧情麻豆| 国产精品久久久久久久久果冻传媒| 久久只精品国产| 久久综合成人精品亚洲另类欧美| 欧美成人精品福利| 精品国产91洋老外米糕| 精品电影一区二区| 久久久夜色精品亚洲| 国产亚洲欧洲一区高清在线观看| 久久九九99视频| 久久久久久日产精品| 久久精品无码一区二区三区| 国产校园另类小说区| 国产农村妇女精品| 中文字幕高清一区| 亚洲色欲色欲www在线观看| 亚洲男人电影天堂| 亚洲一级二级在线| 日日夜夜精品免费视频| 蜜桃精品视频在线观看| 黑人精品欧美一区二区蜜桃| 国产精品一区二区x88av| 国产aⅴ综合色| av在线不卡网| 在线观看欧美日本| 7777精品久久久大香线蕉| 欧美一级搡bbbb搡bbbb| 精品国产91久久久久久久妲己| 国产视频一区在线播放| 天堂影院一区二区|