PDA

View Full Version : سوال در مورد Threat ها .



pooria_googooli
یک شنبه 01 آبان 1390, 22:26 عصر
سلام دوستان . سوال من این هست که استفاده از threat ها در دقت محاسبات خلل ایجاد نمیکنه ؟ مثلا استفاده ای که من ازش میکنم: یه تابعی دارم میره از داخل یک جدولی یه سری داده را سرچ میکنه . تابع دومی میاد بر اساس سرچ هایی که اون تابع اولی انجام داده تغییرات توی جدول 2 ایجاد میکنه . آیا اگر من این جا بیام دو تا threat تعریف کنم خللی توی محاسباتم ایجاد نمیشه ؟

nunegandom
یک شنبه 01 آبان 1390, 22:48 عصر
:متفکر:
شما دو تا تابع public تعریف کن از نوع bool و بگو کاره این thread که انجام شد true بشه. بعد اگه این ترد هات هردو true بودن، عملیاتت انجام بشه.و وقتی عملیات انجام شد. bool هات دوباره false بشن!
اینجوری مطمعنا خللی پیش نمیاد.

pooria_googooli
یک شنبه 01 آبان 1390, 23:04 عصر
ممنون اما انگار منظور من را متوجه نشدید . در حالی عادی function1 اول نوشته میشه میره یک سری سرچ را انجام میده سپس function2 نوشته میشه و میره براساس search هایی که function1 انجام داده تغییرات در جداول ایجاد میکنه . شما فرض کن به این صورته :
private void button2_Click(object sender, EventArgs e)
{
Function1();
Function2();


}
اینقدر تعداد محاسبات و سرچ ها بالاست که دقیقا 1 دقیقه و 10 ثانیه طول میکشه تا این دو تابع کاراشون را انجامم بدن . پس من اومدم اون ها را به این صورت نوشتم :
private void button2_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(Function1);
t1.Start();
Thread t2 = new Thread(Function2);
t2.Start();
}
حالا اینجوری احتمال نداره خطا توی محاسبات پیش بیاد ؟ چون هنوز عمل جستجوی function1 تمام نشده ولی function2 اجرا میشه . میشه با کد بگید چجوری تغییرش بدم ؟

nunegandom
یک شنبه 01 آبان 1390, 23:15 عصر
:اشتباه: زمانی از ترد استفاده میکنیم که میخواهیم دو چیز همزمان بروند به پروسس، پس الان که شما این کارو کردی ترتیبی وجود نداره.تا t1 اجرا بشه، t2 هم اجرا میشه!اینجا نباید از ترد استفاده کنید(تا اونجایی که من میدونم)! یا همون مقدار بولین ها رو که بگذارید هم همیشه میتونید تردهاتون رو کنترل کنین.

pooria_googooli
یک شنبه 01 آبان 1390, 23:17 عصر
خوب پس میگید چه کار کنم ؟ چون وقتی از دو تا ترد استفاده میکنم سرعت اجرا شدیدا بالا میره یعنی به جای اون 1 دقیقه و 10 ثانیه فقط دو ثانیه طول میکشه .

nunegandom
یک شنبه 01 آبان 1390, 23:59 عصر
public bool function1bool = false;
آخره Function1 مقدار بولین رو برابر با True قرار بدید. بعد شرط بذارید اگه True بود Function2 انجام بشه.(در آخره Function2 بولین رو به False برگردونید که اگه خواستید کد رو تکرار کنید دچار مشکل نشید) موفق باشید