ম্যান পৃষ্ঠাটি উদ্ধৃত করতে:
কন্ডিশনের ভেরিয়েবলগুলি ব্যবহার করার সময় প্রতিটি কন্ডিশনের সাথে ভাগ করে নেওয়া বারিয়ার ভেরিয়েবলের সাথে জড়িত একটি বুলিয়ান প্রিকিকেট থাকে যা থ্রেডটি এগিয়ে যাওয়া উচিত কিনা তা সত্য wait Pthread_cond_timedwait () অথবা pthread_cond_wait () ফাংশন থেকে উদ্দীপনা জাগতে পারে। যেহেতু pthread_cond_timedwait () বা pthread_cond_wait () থেকে প্রত্যাবর্তন এই শিকারীর মান সম্পর্কে কিছুই বোঝায় না, তাই এই ধরনের ফেরতের উপর ভবিষ্যদ্বাণীটিকে পুনরায় মূল্যায়ন করা উচিত।
সুতরাং, pthread_cond_wait
আপনি এটি সিগন্যাল না করেও ফিরে আসতে পারেন। কমপক্ষে প্রথম নজরে, এটি বেশ নৃশংস বলে মনে হচ্ছে। এটি এমন কোনও ফাংশনের মতো হবে যা এলোমেলোভাবে ভুল মান ফিরে আসল বা এলোমেলোভাবে ফিরে আসার আগে এটি যথাযথ রিটার্নের স্টেটমেন্টে পৌঁছানোর আগে। এটি একটি বড় বাগের মতো মনে হচ্ছে। তবে তারা যে বিষয়টি ঠিক করার পরিবর্তে ম্যান পৃষ্ঠায় এটি নথিভুক্ত করার সিদ্ধান্ত নিয়েছে তা এ থেকে বোঝা যায় যে এখানে একটি বৈধ কারণ রয়েছে যা কেন pthread_cond_wait
তীব্রভাবে জাগ্রত হয়। সম্ভবত, এটি কীভাবে এটি কাজ করে সেটির অভ্যন্তরীণ কিছু রয়েছে যাতে এটি সাহায্য করা যায় না। প্রশ্ন কি।
কেনpthread_cond_wait
তীব্রভাবে ফিরে আসে ? কেন এটি গ্যারান্টি দিতে পারে না যে এটি কেবলমাত্র যখন সঠিকভাবে সংকেত দেওয়া হয়েছে তখনই তারা জেগে উঠবে? এর উত্সাহী আচরণের কারণ কি কেউ ব্যাখ্যা করতে পারেন?
pthread_cond_(timed)wait
: "যদি একটি সংকেত সরবরাহ করা হয় ... তবে থ্রেডটি শর্ত পরিবর্তনের অপেক্ষায় পুনরায় শুরু হয় যেন এটি ছিল বাধা দেওয়া হয়নি, বা উদ্দীপনা জাগানোর কারণে এটি শূন্য ফিরে আসবে "। অন্যান্য অবরুদ্ধ ফাংশনগুলি EINTR
যখন সিগন্যাল দ্বারা বাধাগ্রস্থ হয় (উদাহরণস্বরূপ read
), বা পুনরায় শুরু করার প্রয়োজন হয় (যেমন pthread_mutex_lock
)। সুতরাং যদি উত্সাহী জাগরণের জন্য অন্য কোনও কারণ না থাকে তবে সেগুলির মধ্যে দুটির pthread_cond_wait
মতোই সংজ্ঞা দেওয়া যেতে পারে।