মিংডাব্লু-ডাব্লু 64 থ্রেড: পিক্সিক বনাম উইন 32


127

আমি উইন্ডোজটিতে মিংডাব্লু-ডাব্লু 64 ইনস্টল করছি এবং দুটি বিকল্প রয়েছে: উইন 32 থ্রেড এবং পসিক্স থ্রেড। আমি জানি win32 থ্রেড এবং পাইথ্রেডগুলির মধ্যে পার্থক্য কী তবে আমি বুঝতে পারছি না এই দুটি বিকল্পের মধ্যে পার্থক্য কী। আমি সন্দেহ করি যে আমি যদি পসিক্স থ্রেড চয়ন করি তবে এটি আমাকে ক্রিয়েটথ্রেডের মতো উইনাপি ফাংশনগুলি কল করা থেকে বিরত করবে।

দেখে মনে হচ্ছে এই অপশনটি নির্দিষ্ট করে যে কোন থ্রেডিং এপিআই কোনও প্রোগ্রাম বা লাইব্রেরি দ্বারা ব্যবহৃত হবে তবে কী দ্বারা? জিসিসি, লিবিস্টডিসি ++ বা অন্য কিছু দ্বারা?

আমি এটি খুঁজে পেলাম: উইন্ডোগুলির জিসিসি বন্দরে থ্রেড_পোসিক্স এবং থ্রেড_উইন 32 এর মধ্যে পার্থক্য কী?

সংক্ষেপে, এই সংস্করণটি মিংডউয়ের জন্য, থ্রেডস-পিক্সিক রিলিজটি পিক্সিক এপিআই ব্যবহার করবে এবং স্ট্যান্ড :: থ্রেড ব্যবহার করবে এবং থ্রেড-উইন 32 উইন 32 এপিআই ব্যবহার করবে এবং স্ট্যান্ড :: থ্রেড অংশটি অক্ষম করবে মান।

ঠিক আছে, আমি যদি win32 থ্রেড নির্বাচন করি তবে স্ট্যান্ড :: থ্রেড অনুপলব্ধ হবে তবে উইন32 থ্রেডগুলি এখনও ব্যবহৃত হবে। তবে কি দ্বারা ব্যবহৃত?


এই জিসিসি ব্যবহার করে তৈরি অ্যাপ্লিকেশন দ্বারা ব্যবহৃত ।
ডিভনুল

@ দেবনুল, এটি আমি ব্যবহার করব এমন এপিআই দ্বারা নির্ধারিত নয়? আমি যদি MinGW এর pthreads সংস্করণটি নির্বাচন করব, তবে থ্রেডগুলির জন্য আমাকে WinAPI ব্যবহার করা থেকে বাধা দেবে কী?
সাইমন

gcc আপনাকে বাধা দেবে, বা বরং: অস্থির হয়ে
উঠুন

উত্তর:


122

জিসিসি একটি সংকলক রানটাইম লাইব্রেরি (libgcc) নিয়ে আসে যা এটি (অন্যান্য জিনিসগুলির মধ্যে) এর জন্য ব্যবহৃত ভাষাগুলিতে মাল্টিথ্রেডিং সম্পর্কিত কার্যকারিতার জন্য নিম্ন-স্তরের ওএস বিমূর্ততা সরবরাহ করে providing সর্বাধিক প্রাসঙ্গিক উদাহরণটি হল libstdc ++ এর C ++ 11 <thread>, <mutex>এবং <future>, যখন জিসিসি এর অভ্যন্তরীণ উইন 32 থ্রেডিং মডেলটি তৈরি করা হয় তখন এর সম্পূর্ণ বাস্তবায়ন হয় না। MinGW-w64 একটি winpthreads (উইন 32 মাল্টিথ্রেডিং এপিআই এর উপরে একটি pthreads বাস্তবায়ন) সরবরাহ করে যা সমস্ত অভিনব বৈশিষ্ট্যগুলি সক্ষম করতে GCC লিংক করতে পারে।

আমাকে অবশ্যই জোর দিতে হবে এই অপশনটি আপনাকে চাইলে কোনও কোড লিখতে নিষেধ করে না (আপনি নিজের কোডটিতে কী এপিআই কল করতে পারবেন তার কোনও প্রভাব নেই )। এটি কেবলমাত্র GCC- র রানটাইম লাইব্রেরিগুলি (libgcc / libstdc ++ / ...) তাদের কার্যকারিতার জন্য কী ব্যবহার করে তা প্রতিফলিত করে। @ জেমস দ্বারা উদ্ধৃত ক্যাভিয়েটের জিসিসির অভ্যন্তরীণ থ্রেডিং মডেলের সাথে কিছু নয়, বরং মাইক্রোসফ্টের সিআরটি বাস্তবায়নের সাথে।

সংক্ষেপ:

  • posix: সি ++ 11 / সি 11 মাল্টিথ্রেডিং বৈশিষ্ট্যগুলি সক্ষম করুন। Libgcc টি libwinpthreads এর উপর নির্ভর করে, যাতে আপনি সরাসরি pthreads এপিআই কল না করলেও আপনি winpthreads DLL বিতরণ করবেন। আপনার অ্যাপ্লিকেশনটির সাথে আরও একটি ডিএলএল বিতরণ করার কোনও সমস্যা নেই।
  • win32: কোনও সি ++ 11 মাল্টিথ্রেডিং বৈশিষ্ট্য নেই।

উইন 32 এপিআই বা পাইথ্রেডস এপিআই কল করে এমন কোনও ব্যবহারকারীর কোডের প্রভাব নেই। আপনি সর্বদা উভয় ব্যবহার করতে পারেন।


7
আপনি সর্বদা জিসিসি রানটাইম এবং উইনপ্যাথ্রেডগুলি স্থিতিশীলভাবে লিঙ্ক করতে পারেন, ডিএলএল অন্তর্ভুক্তির প্রয়োজনীয়তা সরিয়ে ফেলতে পারেন।
আলেকজান্ডার শিশেনকো

3
এটা আমার লিনাক্স সংশ্লিষ্ট বিকল্প খুঁজে পেতে কিছুটা সময় লেগেছিল, তাই ক্ষেত্রে এটি অন্য কারো সাহায্য করে: প্যাকেজ g++-mingw-w64-x86-64দুটি ফাইলের উপলব্ধ x86_64-w64-mingw32-g++-win32এবং x86_64-w64-mingw32-g++-posix, এবং x86_64-w64-mingw32-g++তাদের মধ্যে একজন ওরফে অন্য; দেখতে update-alternatives --display x86_64-w64-mingw32-g++
স্টিবাবাসিক

হুম, আপনি বলছেন "... জিসিসি তার অভ্যন্তরীণ উইন 32 থ্রেডিং মডেল দিয়ে তৈরি করা হলে এর সম্পূর্ণ বাস্তবায়ন হয় না .... মিনিজিডাব্লু-ডাব্লু 64 একটি উইনপ্রেড (উইন 32 মাল্টিথ্রেডিং এপিআইয়ের শীর্ষে একটি পাইথ্রেড বাস্তবায়ন) সরবরাহ করে যা জিসি করতে পারে তারপরে সমস্ত অভিনব বৈশিষ্ট্য সক্ষম করতে লিংক দিন। সুতরাং আমি যদি win32 মডেলটি নির্বাচন করি তবে জিসিসি এখনও সমস্ত বৈশিষ্ট্য সক্ষম করতে পারে, কারণ এটি উইনপ্যাথ্রেড ব্যবহার করে? তবে নীচের বুলেটে আপনি "win32: No C ++ 11 মাল্টিথ্রেডিং বৈশিষ্ট্যগুলি" লিখেছেন। আমি বুঝতে পারছি না। "এরপরে কোন জিসিসির সাথে লিঙ্ক করতে পারে ..." এর অর্থ কি আমি যদি উইন 32 নির্বাচন না করি তবে এটি নির্বাচন করতে পারে ...?
জোহানেস স্কাউব -

@ জোহানেস শ্যাব-লিটব ভাল, না জিসিসির অভ্যন্তরীণ "গ্যাথ্রেড" মোড়কের শীর্ষে নির্মিত পরে (যা কেবল একটি পাতলা পিক্সিকের মতো থ্রেড বিমূর্তকরণ। সি ++ 11 বৈশিষ্ট্যের জন্য মৌলিক টুকরো অনুপস্থিত) জিসিসির কনফিগার ম্যাজিক দম্পতিরা অভ্যন্তরীণ থ্রেড মডেল নির্বাচনকে libstdc ++ এর সক্ষম বৈশিষ্ট্যগুলির সাথে যুক্ত করে যে স্তর যখন আপনি ব্যবহার --threads=win32। সুতরাং যতদিন অনুপস্থিত বিট জিসিসি বাস্তবায়িত হয় না, আপনি জিসিসি সঙ্গে কনফিগার করতে হবে --threads=win32
rubenvb

আমি কি কিউটি-র মিংডিং প্রাকম্পিল্ড লাইব্রেরি ব্যবহার করতে পারি, যা -posix ব্যবহার করে এমন অন্যান্য লাইব্রেরির সাথে -Win32 ব্যবহার করে এবং একই প্রোগ্রামে উভয় গ্রন্থাগার ব্যবহার করতে পারে?
জোহানেস স্কাউব - লিটব

16

জিসিসি রানটাইমের অংশগুলি (ব্যতিক্রম হ্যান্ডলিং, বিশেষত) থ্রেডিং মডেলটি ব্যবহৃত হচ্ছে তার উপর নির্ভরশীল। সুতরাং, আপনি যদি পসিক্স থ্রেড দিয়ে নির্মিত রানটাইমের সংস্করণটি ব্যবহার করে থাকেন তবে উইন 32 এপিআই দিয়ে আপনার নিজস্ব কোডে থ্রেড তৈরি করার সিদ্ধান্ত নিলে আপনার কোনও সময়ে সমস্যা হওয়ার সম্ভাবনা রয়েছে।

এমনকি আপনি রানটাইমের উইন 32 থ্রেডিং সংস্করণ ব্যবহার করছেন এমন কি আপনার সম্ভবত সরাসরি উইন 32 এপিআইকে কল করা উচিত নয়। MinGW এফএকিউ থেকে উদ্ধৃতি :

যেহেতু মিনজিডাব্লু স্ট্যান্ডার্ড মাইক্রোসফ্ট সি রানটাইম লাইব্রেরিটি উইন্ডোজের সাথে আসে তাই আপনার সতর্ক হওয়া উচিত এবং একটি নতুন থ্রেড তৈরি করতে সঠিক ফাংশনটি ব্যবহার করা উচিত। বিশেষত, CreateThreadফাংশনটি সি রানটাইম লাইব্রেরির জন্য স্ট্যাকটি সঠিকভাবে সেটআপ করবে না। _beginthreadexপরিবর্তে আপনার ব্যবহার করা উচিত , যা (প্রায়) সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ CreateThread


7
এই ক্ষেত্রে, তৃতীয় পক্ষের থ্রেডিং লাইব্রেরি বুস্ট বা কিউটির মতো কী? এইগুলির জন্য অন্তর্নিহিত থ্রেডিং লাইব্রেরিটি বের করে না ফেলে আপনি কি এই লাইব্রেরিগুলিকে মিংডব্লিউ 64 সহ কোনও উপায়ে ব্যবহার করতে পারেন? যদি আমি নির্বিচারে বুস্ট :: থ্রেডগুলি মিংডিংয়ের পিক্সের বৈকল্পিকের সাথে ব্যবহার করার সিদ্ধান্ত নিই তবে কী হবে?
তানতুনি

1
@ user460153 কিছু তথ্য qt-project.org/wiki/…
অ্যালেক্স ভি।

10
এই উত্তরটি ভুল। জিসিসি রানটাইমের উইন 32 এপিআই-তে একেবারেই কোনও প্রভাব নেই।
রুবেনভবি

লিঙ্কযুক্ত FAQ এন্ট্রি পড়ুন। এই উত্তরটি সঠিক।
দাইরা হপউড

13

নোট করুন যে উইন 32 থ্রেডিং মোডে এখন কয়েকটি সি ++ 11 স্ট্যান্ড :: থ্রেড ব্যবহার করা সম্ভব। এই শিরোলেখ-কেবল অ্যাডাপ্টারগুলি আমার জন্য বাক্স থেকে বেরিয়েছে: https://github.com/meganz/mingw-std-threads

পুনর্বিবেচনার ইতিহাস থেকে দেখে মনে হচ্ছে এটিকে মিংডব্লিউ 64 রানটাইমের অংশ হিসাবে তৈরি করার সাম্প্রতিক কিছু চেষ্টা হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.