فراخوانی متد std::vector.pus_back همزمان توسط چند thread - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

فراخوانی متد std::vector.pus_back همزمان توسط چند thread

0 امتیاز
آیا وکتور معمولی این قابلیت را داره که یتونیم از چتد Thread به طور همزمان متد push_back را فراخوانی کنیم؟ قصد ندارم خودم با criticalSection همچین چیزی را پیاده سازی کنم آیا شما راه دیگر را می تونید پیشنهاد بدید؟اگر از چند thread فراخوانی شه چی پیش میاد؟

آیا کتابخانه boost هم همچین چیزی نداره؟
سوال شده آذر 3, 1393  بوسیله ی shab (امتیاز 194)   8 22 30
دوباره تگ گذاری شد دی 30, 1393 بوسیله ی BlueBlade

2 پاسخ

+1 امتیاز
push_back وکتور thread safe نیست پس نمیتونید همزمان push back کنید و اگر همزمان فراخوانی انجام بشه undefine behavior هست .

راهکار این هست که از mutex استفاده کنید.

vector بوست هم thread safe نیست ولی ساختار های دیگه ای  مثل این رو داره : http://www.boost.org/doc/libs/1_55_0/doc/html/lockfree.html
پاسخ داده شده آذر 5, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
+1 امتیاز
ویژوال استدیو و TBB هر دو دارای کلاس concurrent_vector هستند که می تونید از آنها استفاده کنید.
پاسخ داده شده آذر 6, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
...