زمان کنونی: ۱۶ آبان ۱۴۰۳, ۰۳:۴۳ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

برنامه نویسی چند نخی programming thread

ارسال:
۲۴ فروردین ۱۳۹۴, ۰۷:۵۱ ق.ظ (آخرین ویرایش در این ارسال: ۲۴ فروردین ۱۳۹۴ ۰۱:۰۸ ب.ظ، توسط Bache Mosbat.)
برنامه نویسی چند نخی programming thread
سلام دوستان
من تازه با thread و c# کار می کنم و این ترم شدیدا بهشون نیاز دارم و در جفتشون بسیار مبتدی هستم یه سوال دارم که خیلی وقته تو حلش موندم
و هرکسی منبع خوب از c# , thread programming داره بزاره ممنونم

مرحله اول:
برنامه باید بتواند به تعداد n عدد thread بسازد. کار هر thread مقدار دهی قسمتی از یک آرایه با اعداد تصادفی
بین ۰تا ۱۰۰ است. در ورژن اول برنامه هر thread یک nام از آرایه را پر میکند که این یک به صورت متوالی
است. برای مثال اگر قرار باشد برنامه با ۱۰ thread اجرا شود هر کدام یک دهم آرایه را مقدار دهی میکنند. thread
اول از خانه اول تا صدهزارم، thread دوم از صدهزارم تا دویست هزارم و همینطور تا thread آخر که از نهصدهزارم
تا یک میلیون را مقدار دهی میکند.
زمان اجرای برنامه را از قبل از فراخوانی start برای thread ها تا بعد از join شدن همهی آنها بر حسب ثانیه و میلی
ثانیه )یا دقیقتر( محاسبه شود.


مرحله دوم:
برنامهی بالا را به گونهای تغییر کند که به عنوان مثال اگر تعداد thread ها ۴ عدد بود اولی اندیسها ۰,۴,۸,۱۲,… و
thread دوم اندیسهای ۱,۵,۹,۱۳,… و سومی ۲,۶,۱۰,۱۴,… و چهارمی ۳,۷,۱۱,۱۵,… را مقداردهی کنند. در حالت کلی
وقتی n نخ ساخته میشود اولی اندیسهایی را که باقیماندهی آنها بر n صفر است مقدار دهی میکند و دومی اندیسهایی که
باقیماندهی آنها بر n برابر ۶ است و همینطور تا آخرین نخ اندیسهایی که باقیماندهی آنها بر n برابر با (n-1) است را
مقداردهی میکند
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۲۴ فروردین ۱۳۹۴, ۰۱:۰۸ ب.ظ (آخرین ویرایش در این ارسال: ۲۴ فروردین ۱۳۹۴ ۰۱:۱۰ ب.ظ، توسط Bache Mosbat.)
برنامه نویسی چند نخی programming thread
دوستان اگر می تونید ایشون رو راهنمایی کنید. دوست عزیز حل تمرین آماده در مانشت خلاف قوانینه.در ضمن سوالتون رو جای اشتباه و دوجا پرسیده بودین که تاپیک قبلی حذف شد.

الهی و خلّاقی و حِرزی و مَوئلــی اِلیکَ لَدَی الاِعسارِو الیُسرِ اَفزَعُ
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۲۴ فروردین ۱۳۹۴, ۰۲:۰۹ ب.ظ (آخرین ویرایش در این ارسال: ۲۴ فروردین ۱۳۹۴ ۰۲:۱۷ ب.ظ، توسط x86.)
برنامه نویسی چند نخی programming thread
از قرار معلوم که دنبال جواب مساله هستید. اگه خودتون کدی که نوشتید رو بذارید ما هم میتونیم مشکلاتش رو رفع کنیم. در غیر این صورت اینجا تمرین حل نمی کنیم.

ولی مختصر راهنمایی که میتونم انجام بدم اینه که آرایه و طول اون رو به عنوان متغیر سراسری تعریف کنید. یک تابع بسازید که یک ورودی به عنوان شماره ی نخ دریافت می کنه .(مثلا اگه N تا نخ دارید این ورودی از ۱ تا N متغیر خواهد بود). داخل تابع ابتدا حد پایین و بالای قسمتی که قراره این نخ پردازش کنه (مقدار دهی کنه) رو حساب کنید. مثلا اگه ورودی X هست و طول آرایه M هست به این صورت می تونید حد پایین و بالا رو حساب کنید:

Lower Bound = (M/N)*(X-1)
Upper Bound = (M/N)*(X)

حالا داخل یک حلقه که از حد پایین شروع میشه و به حد بالا میرسه اون خونه ها رو با عدد تصادفی پر کنید. داخل تابع Main هم کافیه یه حلقه بذارید که به تعداد N تا نخ درست کنه هر کدوم این تابعی که بالا توضیح دادیم رو با پارامتر مناسب اجرا کنن و در ادامه یه حلقه بنویسید که به ازای تمامی نخ ها تابع Join اونها رو فراخوانی کنه. می تونید برای تعریف نخ ها هم از یک آرای استفاده کنید که طول آرایه N هست.
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۲۴ فروردین ۱۳۹۴, ۱۱:۰۰ ب.ظ
RE: برنامه نویسی چند نخی programming thread
سلام دوستان مرسی از دید مثبتتون من مشکلم در قسمت کنترل کردن بازه ترد ها و قسمتی که ۱ln را حساب می کنیم ممکنه که بخش پذیر نباشه و یک قسمت اضاف میاد که هیچ تردی اونو پر نمیکنه و واسه این سوالو کامل گذاشتم که ابهامی نباشه و واضح باشه

بازم ممنونم از لطف همگی
اینم کد نصفه [/align]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication4
{
class Program
{
int start;
int end;
static int[] Aray = new int[1000000];


public Program(int s,int e,int []array){
start= s;
end =e;
Aray= array;
}
private static Random R = new Random();
public void fill(){
int e;
int s;
s = start;
e = end;


for (int i = s; i < e; i++) {
Aray[i] = R.Next(1, 100);


}
}

static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
for (int i = 0; i <n; i++) {
Aray[i] = 0;
}


Thread []threadsArray=new Thread[n];
int p=1000000 / n;


// inam tabe zamaneshe
TimeSpan ts;
DateTime dt = DateTime.Now;

for (int i = 0; i < n; i++)
{
threadsArray[i].Start();
}

for (int i = 0; i < n; i++)
{
threadsArray[i].Join();
}


ts = DateTime.Now.Subtract(dt);
Console.WriteLine(ts.Hours + " : " + ts.Minutes + " : " + ts.Seconds + " : " + ts.Milliseconds);


int x = 0;
for (int i = 0; i < 1000000; i++) {
if (Aray[i]==0)
x++;

}

Console.WriteLine( " number of zeroo " + x);




}
}
}
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۲۴ فروردین ۱۳۹۴, ۱۱:۱۱ ب.ظ (آخرین ویرایش در این ارسال: ۲۴ فروردین ۱۳۹۴ ۱۱:۱۴ ب.ظ، توسط x86.)
RE: برنامه نویسی چند نخی programming thread
(۲۴ فروردین ۱۳۹۴ ۱۱:۰۰ ب.ظ)maryam94 نوشته شده توسط:  سلام دوستان مرسی از دید مثبتتون من مشکلم در قسمت کنترل کردن بازه ترد ها و قسمتی که ۱ln را حساب می کنیم ممکنه که بخش پذیر نباشه و یک قسمت اضاف میاد که هیچ تردی اونو پر نمیکنه و واسه این سوالو کامل گذاشتم که ابهامی نباشه و واضح باشه

اگه مشکل فقط همین یه بخشه، میتونید تو تابعی که قرار اجرا بشه، این شرط رو بررسی کنید که اگر شماره ی نخ برابر با تعداد نخ ها بود Upper Bound رو برابر M، که تعداد خونه های آرایه هست، قرار بده.
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۲۴ فروردین ۱۳۹۴, ۱۱:۵۵ ب.ظ
RE: برنامه نویسی چند نخی programming thread
خیلی ممنون که راهنماییم می کنید
ببخشید قسمت اضافی رو فهمیدم توضیحش اما اون قسمت اول که توضیح دادین نمیفهمم برنامه فقط یه ورودی داره اونم تعداد نخ هاست حالا ورودی x چیه؟میشه حلقه ای که می گید رو بنویسید
۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال:
۲۵ فروردین ۱۳۹۴, ۱۲:۱۴ ق.ظ (آخرین ویرایش در این ارسال: ۲۵ فروردین ۱۳۹۴ ۱۲:۱۴ ق.ظ، توسط x86.)
RE: برنامه نویسی چند نخی programming thread
(۲۴ فروردین ۱۳۹۴ ۱۱:۵۵ ب.ظ)maryam94 نوشته شده توسط:  خیلی ممنون که راهنماییم می کنید
ببخشید قسمت اضافی رو فهمیدم توضیحش اما اون قسمت اول که توضیح دادین نمیفهمم برنامه فقط یه ورودی داره اونم تعداد نخ هاست حالا ورودی x چیه؟میشه حلقه ای که می گید رو بنویسید

کد php:
static int N ThreadCount;
static 
int M ArraySize;

void mythread (object threadNumber)
{
    
int X = (int)threadNumber;
    
int LowerBound =(M/N)*(X-1);
    
int UpperBound =(M/N)*(X);

    if(
X==N)
        
UpperBound M;

    
//TODO: write the loop

۰
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ


موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  کمک برای شروع برنامه نویسی seyed ehsn ۲۱ ۱۵,۸۴۱ ۲۴ بهمن ۱۴۰۲ ۰۵:۱۰ ب.ظ
آخرین ارسال: maryamjafari63
  پروپوزال نویسی ف.ش ۹ ۱۳,۲۲۸ ۰۱ دى ۱۴۰۰ ۰۱:۱۷ ب.ظ
آخرین ارسال: golkhorami
  رودمپی برای برنامه نویسی Doctorwho ۱ ۲,۱۰۱ ۲۵ آذر ۱۴۰۰ ۰۳:۰۲ ق.ظ
آخرین ارسال: one hacker alone
  استخدام برنامه نویس یا کارآموز برنامه نویسی سی شارپ Hesitant_Girl ۰ ۱,۷۶۴ ۲۰ شهریور ۱۴۰۰ ۱۲:۰۲ ب.ظ
آخرین ارسال: Hesitant_Girl
  در نوشتن چند جمله انگلیسی نیاز به کمک دارم fa_karoon ۰ ۱,۶۸۲ ۰۳ شهریور ۱۴۰۰ ۰۱:۰۹ ب.ظ
آخرین ارسال: fa_karoon
  رودمپی برای یادگیری برنامه نویسی Doctorwho ۰ ۱,۷۹۷ ۲۳ اردیبهشت ۱۴۰۰ ۱۱:۲۲ ق.ظ
آخرین ارسال: Doctorwho
  درخواست برنامه برای اردینو در iot seokheiry ۱ ۳,۳۴۹ ۱۳ بهمن ۱۳۹۹ ۱۲:۵۵ ب.ظ
آخرین ارسال: iot-programer
  حل فرمول سیگما Σ [(safety -1) thread -1] Hamedudk ۰ ۱,۷۰۳ ۰۶ دى ۱۳۹۹ ۱۱:۵۳ ق.ظ
آخرین ارسال: Hamedudk
  مدیریت سیستم چند پردازنده ای متقارن no_ta2000 ۰ ۱,۷۰۰ ۰۹ مهر ۱۳۹۹ ۰۲:۲۱ ب.ظ
آخرین ارسال: no_ta2000
  کدام زبان برنامه‌نویسی بهترین انتخاب است؟ elecomco ۲ ۳,۱۱۶ ۱۰ شهریور ۱۳۹۹ ۰۵:۱۶ ب.ظ
آخرین ارسال: kilookiloo

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close