কোনও থ্রেড তৈরি করা কী নিজে থেকে মেমরি অর্ডার গ্যারান্টি সরবরাহ করে?


20

আমি মোটামুটিভাবে এটি করতে চাই:

প্রাথমিক থ্রেড:

  • বিশ্বব্যাপী কিছু মান লিখুন (সেগুলি আর কখনও লেখা হবে না)
    • এটি মাঝারিভাবে বড় ডেটা (অ্যারে, স্ট্রিং ইত্যাদি) হতে পারে। সহজভাবে তৈরি করা যায় না std::atomic<>
  • অন্যান্য থ্রেড স্প্যান

অন্যান্য থ্রেড:

  • গ্লোবাল স্টেট পড়ুন
  • কাজ, ইত্যাদি

এখন, আমি জানি আমি যুক্তিগুলি পাস করতে পারি std::thread, তবে আমি এই উদাহরণটির মাধ্যমে সি ++ এর মেমরির গ্যারান্টি বোঝার চেষ্টা করছি।

এছাড়াও, আমি দৃ confident়ভাবে আত্মবিশ্বাসী যে কোনও বাস্তব-বিশ্ব বাস্তবায়নের জন্য, থ্রেড তৈরি করা মেমরির বাধা সৃষ্টি করে তা নিশ্চিত করে যে থ্রেডটি পয়েন্ট অবধি অবধি পিতৃত থ্রেড যা কিছু লিখেছিল তা "দেখতে" পারে।

তবে আমার প্রশ্নটি: এটি কি স্ট্যান্ডার্ড দ্বারা গ্যারান্টিযুক্ত?

একদিকে: আমি মনে করি আমি কিছু ডামি std::atomic<int>বা আরও যোগ করতে পারলাম এবং অন্য থ্রেডগুলি শুরু করার আগে এটি লিখতে হবে, তারপরে অন্যান্য থ্রেডগুলিতে এটি একবার স্টার্টআপের পরে পড়ুন। আমি বিশ্বাস করি যে পূর্বে লিখিত বিশ্বব্যাপী রাষ্ট্র যথাযথভাবে দৃশ্যমান তা গ্যারান্টি দিয়েছিল machinery

তবে আমার প্রশ্নটি হ'ল যদি এর মতো কিছু প্রযুক্তিগতভাবে প্রয়োজন হয়, বা থ্রেড তৈরির পক্ষে যথেষ্ট?


আমি মনে করি আমি কিছু ডামি যুক্তstd::atomic<int> করতে পারি ... আপনি ব্যবহার করতে পারেন std::atomic_thread_fence
রিন Kaenbyou

পুনঃটুইট অপসারণ মন্তব্য। আমার প্রশ্নগুলি যত বোকা হোক তা আপনি এখানে আমাকে কতবার সাহায্য করেছিলেন তা আমি গণনা করতে পারি না ...
idclev 463035818

1
@ idclev463035818 কোনও উদ্বেগ নেই। এটা আমাদের সবার সাথেই ঘটে।
নাথান অলিভার

উত্তর:


26

থ্রেড সৃষ্টি যথেষ্ট। থ্রেড কনস্ট্রাক্টর এবং নতুন থ্রেডের সূচনা [থ্রেড.থ্রেড.কন্ট্রাস্ট] / 7 এর মধ্যে একটি সিঙ্ক্রোনাইজেশন পয়েন্ট রয়েছে

সিঙ্ক্রোনাইজেশন: কন্সট্রাক্টরের অনুরোধের সমাপ্তি অনুলিপিটির অনুরোধের সূচনার সাথে সিঙ্ক্রোনাইজ হয় f

এর অর্থ এই যে নতুন থ্রেড তৈরি হওয়ার আগে থ্রেডের সমস্ত রাজ্য স্পাড থ্রেডে দৃশ্যমান।

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