برای استفاده از متغیر سراسری به صورت 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
}