تعریف متغیر سراسری thread safe در C++ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۹۴ نفر آنلاین
۱۲۸ عضو و ۱۶۶ مهمان در سایت حاضرند

تعریف متغیر سراسری thread safe در C++

+2 امتیاز
سلام به دوستان عزیز.آیا این امکان در c++ وجود داره که یک متغیر عمومی را به صورت thread safe استفاده کنیم؟چطوری!!؟
سوال شده دی 7, 1393  بوسیله ی shab (امتیاز 194)   8 22 30
دوباره تگ گذاری شد دی 8, 1393 بوسیله ی BlueBlade

1 پاسخ

+1 امتیاز

برای استفاده از متغیر سراسری به صورت thread safe سه کار میشه کرد :

 

1_از thread_local استفاده کنید ( با استفاده از thread_local هر thread یک کپی متفاوت از متغیر عمومی را استفاده می کنن )

thread_local std::vector<int> global_var;

void t1()//thread 1
{
	//use global_var
}
bool t2()//thread 2
{
	//use global_var
}

//deghat konid ke inja global_var
//dakhele 2 thread motefavet hast va share nemishe
 

2_اگر می خواهید متغیر سراسری را بین thread ها به اشتراک بگذارید یک mutex بصورت گلوبال تعریف کنید و قبل از استفاده از متغیر lock کنید .


std::vector<int> global_var;
std::mutex global_mutex;

void t1()//thread 1
{
	std::lock_guard<std::mutex> g(global_mutex);
	//use global_var
}
void t2()//thread 2
{
	std::lock_guard<std::mutex> g(global_mutex);
	//use global_var
}

3_یک راه دیگه هم برای share کردن این هست که از std::atomic استفاده کنید (البته در صورتی که متغیر سراسری تون جزو انواع تعریف شده مثل int  , char باشه)


std::atomic<int> global_var;

void t1()//thread 1
{
	//use global_var
}
void t2()//thread 2
{
	//use global_var
}

 

پاسخ داده شده دی 7, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده دی 8, 1393 بوسیله ی BlueBlade
...