আপনি ভুল শুনেছেন। এটি "i++"একটি নির্দিষ্ট সংকলক এবং নির্দিষ্ট প্রসেসরের আর্কিটেকচারের জন্য থ্রেড-নিরাপদ হতে পারে তবে এটি মানদণ্ডগুলিতে মোটেই বাধ্যতামূলক নয়। আসলে, যেহেতু মাল্টি-থ্রেডিং আইএসও সি বা সি ++ স্ট্যান্ডার্ডের ( অ ) অংশ নয় , তাই আপনি যা ভাবেন সেটির উপর ভিত্তি করে কোনও বিষয় থ্রেড-সেফ হিসাবে বিবেচনা করতে পারবেন না।
এটি বেশ সম্ভাব্য যা ++iএকটি স্বেচ্ছাসেবী ক্রমের সংকলন করতে পারে যেমন:
load r0,[i] ; load memory into reg 0
incr r0 ; increment reg 0
stor [i],r0 ; store reg 0 back to memory
যা আমার (কল্পিত) সিপিইউতে থ্রেড-নিরাপদ হবে না যার মেমোরি-ইনক্রিমেন্টের কোনও নির্দেশনা নেই। অথবা এটি স্মার্ট হতে পারে এবং এটি সংকলন করতে পারে:
lock ; disable task switching (interrupts)
load r0,[i] ; load memory into reg 0
incr r0 ; increment reg 0
stor [i],r0 ; store reg 0 back to memory
unlock ; enable task switching (interrupts)
যেখানে বাধা lockঅক্ষম করে এবং unlockসক্ষম করে। তবে, তবুও, এটি কোনও আর্কিটেকচারে থ্রেড-সেফ না হতে পারে যা এই সিপিইউগুলির মধ্যে একটির বেশি ভাগ করে নেওয়ার মেমরি রয়েছে ( lockকেবলমাত্র একটি সিপিইউয়ের জন্য বাধা নিষ্ক্রিয় করতে পারে)।
ভাষা নিজেই (বা এটির জন্য লাইব্রেরিগুলি যদি এটি ভাষায় নির্মিত না হয়) থ্রেড-সেফ কনস্ট্রাক্টস সরবরাহ করবে এবং কোন মেশিন কোড উত্পন্ন হবে তার আপনার বোঝার (বা সম্ভবত ভুল বোঝাবুঝির) উপর নির্ভর করে আপনার সেগুলি ব্যবহার করা উচিত।
জাভা synchronizedএবং pthread_mutex_lock()(কিছু অপারেটিং সিস্টেমের অধীনে সি / সি ++ উপলভ্য) এর মতো বিষয়গুলি যা আপনাকে (ক) দেখার প্রয়োজন ।
(ক) সি 11 এবং সি ++ 11 মান সম্পন্ন হওয়ার আগে এই প্রশ্ন জিজ্ঞাসা করা হয়েছিল? সেই পুনরাবৃত্তিগুলি এখন পারমাণবিক ডেটা ধরণের (যদিও তারা এবং সাধারণভাবে থ্রেড অপশনাল, কমপক্ষে সিতে) সহ ভাষা স্পেসিফিকেশনে থ্রেডিং সমর্থনটি চালু করেছে ।