PDA

View Full Version : MSMQ & Thread



behnia_k
یک شنبه 05 اسفند 1397, 14:13 عصر
آیا توابع مربوط به
MSMQ نظیر MQReceiveMessage و MQSendMessage و دیگر توابع موجود در فایل mq.h قابل استفاده در Thread ها هستند بعبارتی Threadsafe هستند.

farhad_shiri_ex
یک شنبه 05 اسفند 1397, 15:01 عصر
آیا توابع مربوط به
MSMQ نظیر MQReceiveMessage و MQSendMessage و دیگر توابع موجود در فایل mq.h قابل استفاده در Thread ها هستند بعبارتی Threadsafe هستند.

با استفاده از این توابع می توان بین چند پردازه تو یک کامپیوتر ویا در کامپیوترهای ریموت شده به تبادل پیغام پرداخت که کاربردهایی زیادی هم داره البته فقط در ویندوز ...
بنابراین thread safety بودن اصولا نمی تونه نیاز باشه! یعنی شما داده ای ندارید که بخواهید در یک پردازش در چند نخ باهم سر استفاده از منابع به رقابت بپردازند چون همونطور که عرض کردم با استفاده از این توابع شما بین چند پردازه مختلف در حال انتقال داده هستید قطعا نمی تونه race condition رخ بده علتش هم که خوب کاملا واضح هست هر پردازه توسط سیستم عامل کنترل میشه و منابع خودش را داره!
بنابراین استفاده از این توابع در یک پردازه بین چند نخ معنی نداره! که بخواهد thread safe هم باشند!

behnia_k
یک شنبه 05 اسفند 1397, 18:36 عصر
با استفاده از این توابع می توان بین چند پردازه تو یک کامپیوتر ویا در کامپیوترهای ریموت شده به تبادل پیغام پرداخت که کاربردهایی زیادی هم داره البته فقط در ویندوز ...
بنابراین thread safety بودن اصولا نمی تونه نیاز باشه! یعنی شما داده ای ندارید که بخواهید در یک پردازش در چند نخ باهم سر استفاده از منابع به رقابت بپردازند چون همونطور که عرض کردم با استفاده از این توابع شما بین چند پردازه مختلف در حال انتقال داده هستید قطعا نمی تونه race condition رخ بده علتش هم که خوب کاملا واضح هست هر پردازه توسط سیستم عامل کنترل میشه و منابع خودش را داره!
بنابراین استفاده از این توابع در یک پردازه بین چند نخ معنی نداره! که بخواهد thread safe هم باشند!
با تشکر
توابع گفته شده از هندل QUEUEHANDLE که یک پوینتر است که توسط تابع MQOpenQueue مقدار دهی میشود استفاده می شود.
حال اگر ما یک بار به این هندل را مقدار دهی کنیم و از آن در تردهای مختلف استفاده کنیم مشکلی ایجاد می کند یا نه.

نمی خواهم در هر ترد از MQOpenQueue استفاده کنم.

farhad_shiri_ex
سه شنبه 14 اسفند 1397, 13:11 عصر
با تشکر
توابع گفته شده از هندل QUEUEHANDLE که یک پوینتر است که توسط تابع MQOpenQueue مقدار دهی میشود استفاده می شود.
حال اگر ما یک بار به این هندل را مقدار دهی کنیم و از آن در تردهای مختلف استفاده کنیم مشکلی ایجاد می کند یا نه.

نمی خواهم در هر ترد از MQOpenQueue استفاده کنم.

بله! شما وقتی یکبار در یک نخ مقداردهی میکنید دیگه تو یک نخ دیگه ای که مقدار هندل را به روز نمی کنید پس اگر مالکیت یکتا مدنظرتون هست بله! ایمن هست! خیلی هم بهتره از اشاره گرهای هوشمند مثل unique_ptr استفاده کنید!

behnia_k
شنبه 18 اسفند 1397, 17:02 عصر
بله! شما وقتی یکبار در یک نخ مقداردهی میکنید دیگه تو یک نخ دیگه ای که مقدار هندل را به روز نمی کنید پس اگر مالکیت یکتا مدنظرتون هست بله! ایمن هست! خیلی هم بهتره از اشاره گرهای هوشمند مثل unique_ptr استفاده کنید!
متشکرم
با این توضیحات آیا میتوان گقت توابع مربوط به خواندن و نوشتن در MSMQ با هندل ایجاد شده توسط
MQOpenQueueبرخلاف هندل FILE جهت استفاده از در Thread ایمن هستند.
البته اگر اینطور باشد به نظرم کنترلهای مربور به دسترسی همزمان در داخل خود توابع کنترل میشوند.

pe32_64
پنج شنبه 18 مهر 1398, 00:30 صبح
آیا توابع مربوط به
MSMQ نظیر
MQReceiveMessage و MQSendMessage و دیگر توابع موجود در فایل mq.h قابل استفاده در Thread ها هستند بعبارتی Threadsafe هستند.
درود
Threadsafe نیستند.
باید از Thread synchronization یا راه های دیگه استفاده کنید