ইন কাগজ এই প্রশ্নের যে একই শিরোনাম সঙ্গে, লেখক একটি বিল্ড কিভাবে বর্ণনা nonblocking linearizable বহু-শব্দ সি এ এস শুধুমাত্র একটি একক শব্দ সি এ এস ব্যবহার অপারেশন। তারা প্রথমে ডাবল-তুলনা-একক-স্বাপ অপারেশন - আরডিসিএস, নিম্নরূপ উপস্থাপন করেছেন:
word_t RDCSS(RDCSSDescriptor_t *d) {
do {
r = CAS1(d->a2, d->o2, d);
if (IsDescriptor(r)) Complete(r);
} while (IsDescriptor(r));
if (r == d->o2) Complete(d); // !!
return r;
}
void Complete(RDCSSDescriptor_t *d) {
v = *(d->a1);
if (v == d->o1) CAS1(d->a2, d, d->n2);
else CAS1(d->a2, d, d->o2);
}
RDCSSDescriptor_t
নিম্নলিখিত ক্ষেত্রগুলি সহ একটি কাঠামো যেখানে :
a1
- প্রথম শর্তের ঠিকানাo1
- প্রথম ঠিকানায় প্রত্যাশার মানa2
- দ্বিতীয় শর্তের ঠিকানাo2
- দ্বিতীয় ঠিকানায় প্রত্যাশার মানn2
- নতুন ঠিকানায় দ্বিতীয় ঠিকানায় লিখতে হবে
এই বর্ণনাটি আরডিসিএসএস অপারেশন সূচনা করে এমন থ্রেডে একবার তৈরি এবং সূচনা করা হয়েছিল - ফাংশনটিতে প্রথম সিএএস 1 RDCSS
সফল না হওয়া পর্যন্ত অন্য কোনও থ্রেডের সাথে তার উল্লেখ নেই, যা বিবরণকারীকে অ্যাক্সেসযোগ্য (বা কাগজের পরিভাষায় সক্রিয় ) করে তোলে ।
অ্যালগরিদমের পিছনে ধারণাটি হ'ল - আপনি কী করতে চান তা বর্ণনাকারীর সাহায্যে দ্বিতীয় মেমরি অবস্থানটি প্রতিস্থাপন করুন। তারপরে, বর্ণনাকারী উপস্থিত থাকলে, তার মান পরিবর্তন হয়েছে কিনা তা দেখতে প্রথম মেমরি অবস্থান পরীক্ষা করুন। যদি এটি না হয় তবে দ্বিতীয় মেমরির স্থানে বর্ণনকারীটিকে নতুন মান দিয়ে প্রতিস্থাপন করুন। অন্যথায়, দ্বিতীয় মেমরির অবস্থানটি পুরানো মানকে আবার সেট করুন।
!!
কাগজের মধ্যে কেন মন্তব্যটির রেখাটি প্রয়োজনীয় তা লেখকরা ব্যাখ্যা করেন না । আমার কাছে মনে হয় ফাংশনটিতে থাকা CAS1
নির্দেশাবলী Complete
এই চেকের পরে সর্বদা ব্যর্থ হবে, তবে শর্ত থাকে যে সেখানে কোনও একযোগে কোনও পরিবর্তন নেই। এবং যদি চেক এবং সিএএস-এর মধ্যে একযোগে পরিবর্তন ঘটে থাকে তবে চেকটি করা Complete
থ্রেডটি এখনও তার সিএএস-এর সাথে ব্যর্থ হওয়া উচিত Complete
, যেহেতু একযোগে সংশোধন করে একই বর্ণনাকারী ব্যবহার করা উচিত নয় d
।
আমার প্রশ্ন হয়: ফাংশনে পরীক্ষা করতে পারবেন RDCSSS
, if (r == d->o2)...
, RDCSS এখনও একটি ডবল তুলনা, একক swap 'র নির্দেশ যা এর শব্দার্থবিদ্যা বজায় রাখার সঙ্গে বাদ দেওয়া যেতে linearizable এবং লক-বিনামূল্যে ? ( !!
মন্তব্য সহ লাইন )
যদি তা না হয় তবে এই দৃশ্যের সত্যতা নিশ্চিত করার জন্য যেখানে এই লাইনটি প্রয়োজনীয় সেখানে আপনি কী বর্ণনা করতে পারবেন?
ধন্যবাদ.