צריך עזרה קטנה ב-C#

פורום רשתות, IT ומחשוב כללי - רשתות, ראוטרים, מחשבים ניידים, אביזרים וכו'.
falukky פותח השרשור
סמל אישי של משתמש
חבר פעיל מאוד
חבר פעיל מאוד
תגובות: 422
הצטרף: ספטמבר 2010

שליחה

יש לי תרגיל שבו אני אמור לבנות producer שמוצא מספרים ראשוניים בעזרת הנפה של ארטוסתנס.
ואח"כ לבנות consumer ושמכניס כל ראשוני שאני מוצא ל-ל-Queue שקורא את כל המספרים ומדפיס אותם לקונסול.
בקוד שלי בניתי את הנפה שמוצאת את המספרים הראשוניים (ב-main כשבונים את האובייטק מכניסים מספר מסויים למשל 1000 והנפה מוצאת את כל הראשוניים עד 1000) והכנסתי אותם ל-Queue.
מה שלא הולך לי זה ה-consumer ,ואני צריך גם לעשות את זה בעזרת עוד theard (אני צריך להשתמש בזה בתרגיל) שקורא את המספרים ומדפיס.
זה מה שיש לי עד עכשיו:

קוד: בחירת הכל

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 


namespace T 
{ 
    public class Eratosthenes 
    { 
        Queue<int> mPrimesQueue = new Queue<int>&#40;&#41;; 
        public int mCount = 0; 
        public int mMaxNumber; 
        public int mNumberToCheck; 
        public static int mPrime; 
        public static List<int> mNumbersList = new List<int>&#40;&#41;; 


        public Eratosthenes&#40;int max&#41; 
        &#123; 
            mMaxNumber = max; 


            for &#40;int i = 2; i < mMaxNumber + 1; i++&#41; 
            &#123; 
                mNumbersList.Add&#40;i&#41;; 
            &#125; 
        &#125; 


        public bool findNum&#40;int number&#41; 
        &#123; 
            if &#40;number % mPrime == 0&#41; 
            &#123; 
                return true; 
            &#125; 


            return false; 
        &#125; 


        public void checkIfPrime&#40;&#41; 
        &#123; 
            List<int> PrimeList = new List<int>&#40;&#41;;          


            while &#40;mCount < mMaxNumber-1&#41; 
            &#123; 
                if &#40;mNumbersList.Count != 0&#41; 
                &#123; 
                    mPrime = mNumbersList&#91;0&#93;; 
                    for &#40;int i = 0; i < mNumbersList.Count; i++&#41; 
                    &#123; 
                        int NumToCheck = mNumbersList.Find&#40;findNum&#41;; 
                        mNumbersList.Remove&#40;NumToCheck&#41;; 
                    &#125; 


                    mPrimesQueue.Enqueue&#40;mPrime&#41;; 
                    Task QueueTask = new Task&#40;Constumer&#41;; 
                    QueueTask.Start&#40;&#41;; 
                    mNumbersList.Remove&#40;mPrime&#41;; 
                &#125; 


                mCount++; 
            &#125; 
        &#125; 


        public void Constumer&#40;&#41; 
        &#123; 
            while &#40;true&#41; 
            &#123; 
                if &#40;mPrimesQueue.Count == 0&#41; 
                &#123; 


                &#125; 
                else 
                &#123; 
                    Console.WriteLine&#40;mPrimesQueue.First&#40;&#41;&#41;; 
                    mPrimesQueue.Clear&#40;&#41;; 
                &#125; 
            &#125; 
        &#125; 
    &#125; 
&#125; 

KomerKo
סמל אישי של משתמש
חבר פעיל מאוד
חבר פעיל מאוד
תגובות: 247
הצטרף: אוגוסט 2010

שליחה

בעיית פרודוסר קונסומר בצורתה הפשוטה היא בעיית סינכרון בין 2 threads שונים אשר חולקים משאב משותף, בד"כ queue. הפרודוסר מכניס לתור, והקונסומר מוציא מהתור כאשר המטרה היא להבטיח שהפרודוסר לא ינסה להכניס אובייטקים לתור מלא, והקונסומר לא ינסה להוציא אובייקטים מתור ריק. כלומר, לא יעבדו סתם. אם תהיה יותר ספציפי לגבי היכן אתה תקוע אז נוכל לייעץ. בהצלחה.

shaked81
סמל אישי של משתמש
חבר שרק התחיל
חבר שרק התחיל
תגובות: 47
הצטרף: דצמבר 2006

שליחה

תתחיל בלממש את הנפה כמו שצריך...
הנה פסאודו קוד (מויקיפדיה)

קוד: בחירת הכל

SmallPrimeList
 
  Input&#58;  n &#40;n < 2^20&#41;
  Output&#58; P&#91;&#93; &#40;a list of all primes <= n&#41;
 
  1. b&#91;n&#93; = &#123;1,1,...,1&#125;. &#40;a bit array of n one's&#41;.
 
  2. i = 2.
 
  3. While i * i <= n do&#58;
        For j = 2 to n / i do&#58;
           b&#91;j * i&#93; = 0.
        do&#58;
           i = i + 1.
        While b&#91;i&#93; = 0
 
  4. For k = 2 to n do&#58;
        If b&#91;k&#93; = 1 then
           add k to P&#91;&#93;.
 
  5. Return P&#91;&#93;.
חבר שרק התחיל - אהבתי...
רק 9 שנים פה באתר...

falukky פותח השרשור
סמל אישי של משתמש
חבר פעיל מאוד
חבר פעיל מאוד
תגובות: 422
הצטרף: ספטמבר 2010

שליחה

הנפה עובדת כמו שצריך חוץ מקטע קטן שאני אמור להוסיף ובנתיים לא משפיע
10111010100 10111010101 10111010011 10111011001 10111010100
10111100000 10111010111 10111011110 10111010100
10111010000 10111100001 10111010101 10111011100 10111011001 10111011111

חזור אל “רשתות, אינטרנט ו- Fiber”