আমি যদি লক ব্যবহার করি তবে আমার অ্যালগরিদমটি কি এখনও লক-মুক্ত থাকতে পারে?


10

লক-মুক্তের একটি সাধারণ সংজ্ঞা হ'ল কমপক্ষে একটি প্রক্রিয়া অগ্রগতি করে। 1

যদি আমার কাছে কোনও লাউ দ্বারা সুরক্ষিত কাতারের মতো একটি সাধারণ ডেটা স্ট্রাকচার থাকে তবে একটি প্রক্রিয়া সর্বদা অগ্রগতি করতে পারে যেমন একটি প্রক্রিয়া লকটি অর্জন করতে পারে, যা চায় তা করতে পারে এবং ছেড়ে দিতে পারে।

সুতরাং এটি লক-ফ্রি সংজ্ঞা পূরণ করে?


1 উদাহরণস্বরূপ দেখুন এম হারলিহী, ভি। লুশাংকো এবং এম মোয়ার। বাধা মুক্ত সিঙ্ক্রোনাইজেশন: উদাহরণ হিসাবে ডাবল-শেষ সারি। ডিস্ট্রিবিউটেড কম্পিউটিং-এ, 2003. "এটি লক-মুক্ত এটি যদি কেবলমাত্র কিছু থ্রেড সর্বদা অগ্রগতি করে তা নিশ্চিত করে"।


3
আমি ডেটা স্ট্রাকচার এবং অ্যালগরিদমের সেটকে লক ব্যবহার না করে, পারমাণবিক মেমরি অপারেশনের কেবল একটি ছোট সংজ্ঞায়িত সেট বর্ণনা করতে আমি সর্বদা "লক ফ্রি" বুঝতে পেরেছি। উদাহরণস্বরূপ drdobbs.com/parallel/writing-lock-free-code-a-correected-queue/…
পল জনসন

উত্তর:


16

এটি লক-মুক্তের কোনও সংজ্ঞা নয়।

যদি আপনি অগ্রগতির গ্যারান্টি দিতে পারেন তবে আপনার কাছে অচলাবস্থা মুক্ত রয়েছে এবং যদি প্রতিটি অনুরোধের আপনার শেষ পর্যায়ে থাকে তবে আপনার কাছে অনাহারমুক্ত , তবে লক-মুক্ত নয়।

আমি প্রশ্ন করি যে আপনার সাধারণ উদাহরণটি বাস্তবে এটি সরবরাহ করে কিনা। আপনার একাধিক লক জড়িত থাকার সময়ে প্রকৃতপক্ষে গ্যারান্টি তৈরি করতে আপনার লক হায়ারারচিগুলি ইত্যাদি প্রয়োজন।


1
আমি এম হারলিহির সংজ্ঞাটি ব্যবহার করছি। অত্যন্ত সমবর্তী ডেটা অবজেক্টগুলি বাস্তবায়নের জন্য একটি পদ্ধতি। প্রোগ্রামিং-এর ভাষা ও সিস্টেমস, ১৯৯৩-এ লেনদেন। "লক-ফ্রি শর্তটি গ্যারান্টি দেয় যে কিছু প্রক্রিয়া সর্বদা অগ্রগতি অর্জন করবে স্বেচ্ছাসেবী থামানো ব্যর্থতা বা অন্যান্য প্রক্রিয়া দ্বারা বিলম্ব হওয়া সত্ত্বেও"
জো পেনশন

12
@ জো: এটি কোনও সংজ্ঞা নয়, এটি একটি প্রচ্ছন্নতার বর্ণনা দেয়। বিপরীত যুক্তির তাত্ক্ষণিকতা সাবধান।
বেন ভয়েগট

2
এম হারেলিহী, ভি। লুশাংকো এবং এম। মায়ারকেও উদ্ধৃত করতে পারেন। বাধা মুক্ত সিঙ্ক্রোনাইজেশন: উদাহরণ হিসাবে ডাবল-শেষ সারি। ডিস্ট্রিবিউটেড কম্পিউটিং-এ, 2003. "এটি লক-মুক্ত এটি যদি কেবলমাত্র কিছু থ্রেড সর্বদা অগ্রগতি করে তা নিশ্চিত করে"।
জো পেনশন

1
অনাহার মুক্তও রয়েছে যা অচলাবস্থার চেয়েও বেশি নির্দিষ্ট (প্রতিটি প্রক্রিয়া অন্য প্রক্রিয়াগুলিতে যাই হোক না কেন) নোট করুন যে সিএএস লুপগুলি (পারমাণবিক আদিমের উপর ভিত্তি করে) নয়
র‌্যাচেট ফ্রিক

5
@ জো: যদি বিশ্বের অন্যরা যদি সেই সম্পত্তিটিকে অচল-মুক্ত বলে অভিহিত করে তবে আমি সেই শব্দটি ব্যবহার করব। না, আপনার সাধারণ উদাহরণটি অচলিত নয়। কোনও কিছুর অচলাবস্থা থেকে মুক্ত এই গ্যারান্টিটি দেওয়ার জন্য, আপনাকে কেবল সিঙ্ক্রোনাইজেশনের দরকার নেই, তবে গ্যারান্টি রয়েছে যে লকটি ধরে রাখার সময় কোনও থ্রেড কোনও ব্লকিং অপারেশন করে না। "এটি যা চায় তা করুন" অত্যন্ত অস্পষ্ট এবং এই গ্যারান্টি সরবরাহ করে না বলে মনে হয়।
বেন ভয়েগট

11

আমি আর্ট অফ মাল্টিপ্রসেসর প্রোগ্রামিং 1 অধ্যয়ন করেছি এবং আপনার লেখা বইয়ের মতোই তাদের পাঠ্যের স্পষ্টতা নেই। টিএএমপিপি-র কিছু উদ্ধৃতি এখানে রয়েছে:

উদ্ধৃতি 1 (লক-ফ্রি সংজ্ঞা)

কোনও পদ্ধতি লক-ফ্রি হয় যদি এটি গ্যারান্টি দেয় যে সীমিত সংখ্যক পদক্ষেপে কিছু পদ্ধতি কল শেষ হয়।

উদ্ধৃতি 2 (নন-ব্লকিংয়ের সংজ্ঞা)

মোট পদ্ধতির একটি মুলতুবি অনুরোধের জন্য অন্য মুলতুবি অনুরোধটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করার দরকার নেই।

উদ্ধৃতি 3 (দাবি করুন লক-ফ্রি নন-ব্লকিং)

সিস্টেমটি কীভাবে থ্রেড নির্ধারণ করে তা স্বাধীনভাবে অপেক্ষা-মুক্ত এবং লক-ফ্রি নন-ব্লকিং অগ্রগতি শর্তগুলি গ্যারান্টি দেয় যে সামগ্রিকভাবে গণনা অগ্রগতি লাভ করে।

সমস্যাটি হ'ল উদ্ধৃতি 3-এ দাবিটি স্পষ্টতই কোট 1 এর সংজ্ঞা থেকে অনুসরণ করে না যেমন ইতিমধ্যে উল্লিখিত হয়েছে, একটি সিঙ্ক্রোনাইজ করা সারি কোট 1 টি সন্তুষ্ট করছে বলে মনে হচ্ছে: অনন্তর প্রায়শই কিছু পদ্ধতি সফলভাবে লকটি অর্জন করবে এবং সম্পূর্ণ হবে।

বিশেষভাবে উদ্ধৃতি 3 তে বেশ অস্পষ্ট বাক্যাংশটি নোট করুন: "সিস্টেমটি থ্রেডগুলি কীভাবে নির্ধারণ করে তা" স্বাধীনভাবে। এটি "থ্রেড-শিডিউলিং সিস্টেম" এর কোনও প্রকার আনুষ্ঠানিক বর্ণনার পূর্বে নয়, সুতরাং সংজ্ঞাগুলি কী বোঝাতে হবে তার ভিত্তিতে আমাদের প্রাক-ধারণার উপর ভিত্তি করে এর বৈশিষ্ট্যগুলি পুনর্গঠন করা আমাদের ছেড়ে যায় :

  1. সিস্টেম সর্বদা কিছু থ্রেডের নির্দেশাবলী কার্যকর করে ;
  2. এটি কোনও প্রদত্ত থ্রেডের নির্দেশাবলী কার্যকর করতে পারে না ;
  3. সমস্ত থ্রেড বিবেচনাধীন পদ্ধতিতে প্রার্থনা করছে।

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

লক-ফ্রি সংশোধন সংজ্ঞা

কোনও পদ্ধতি লক-মুক্ত হয় যদি তা অবরুদ্ধ না করে এবং অতিরিক্তভাবে, গ্যারান্টি দেয় যে প্রায়শই কিছু পদ্ধতি কল একটি সীমাবদ্ধ পদক্ষেপের মধ্যে শেষ হয়।

1 মরিস হারলিহি, নীর শবিত, আর্ট অফ মাল্টিপ্রসেসর প্রোগ্রামিং, এলসেভিয়ার ২০০৮, পৃষ্ঠা .৮-60০


1
উদ্ধৃতি 1 এর শব্দটি সত্যিই অদ্ভুত। তারা "অসীম প্রায়শই" বলতে কী বোঝায়? স্পষ্টতই "সর্বদা" এর চেয়ে আলাদা কিছু, সুতরাং পদ্ধতিটি "কিছু" ক্ষেত্রে কখনই ফিরে আসে না তা ঠিক?
হাল্ক

হ্যাঁ, অনর্থক ভাষা প্রচুর। যাইহোক "প্রায়শই" কি? আমি মনে করি তাদের অর্থ "অসীম কার্যকর মৃত্যুর ইতিহাসে, এই নির্দিষ্ট ঘটনাটি অসীম বহুবার ঘটে"।
মার্কো টপলনিক

5

পরিভাষা সর্বদা সামঞ্জস্যপূর্ণ হয় না, তবে আমি মনে করি একটি প্রস্তাবিত অ্যালগরিদম বা সিস্টেম সম্পর্কে নিম্নলিখিত প্রশ্নগুলি জিজ্ঞাসা করা গুরুত্বপূর্ণ:

  1. ঘটনার কোনও অনুক্রম আছে যেখানে থ্রেডগুলি একে অপরের জন্য অপেক্ষা করতে আটকে যেতে পারে এমনকি যদি সমস্ত থ্রেডগুলিকে সমস্ত সিপিইউ ব্যবহার করার সময় অনুমতি দেওয়া হয় [যদি তা হয়, তবে এটি অচল নয়)
  2. একটি থ্রেড যদি একটি সালিশী দীর্ঘকাল ধরে অবরুদ্ধ থাকে, তবে এটি কি অন্য থ্রেডগুলিকে আটকাতে পারে বা যথেচ্ছভাবে দীর্ঘকাল ধরে সিস্টেম অপারেশনকে ক্ষতিগ্রস্থ করতে পারে [যদি তা হয় তবে এটি অবরুদ্ধ নয়)।
  3. থ্রেড শিডিয়ুলিংয়ের কিছু-অন্তত-তাত্ত্বিকভাবে সম্ভব সংমিশ্রণ রয়েছে যার ফলে একে অপরের কাজকে অকার্যকর করার সময় সমস্ত থ্রেডগুলি একই অপারেশনগুলিকে বারবার চেষ্টা করতে পারে [যদি তা হয় তবে এটি লক মুক্ত নয়]
  4. যদি কিছু থ্রেড অন্যের তুলনায় পর্যাপ্ত পরিমাণে সিপিইউ সময় দেওয়া হয়, তবে তারা কি পরবর্তী থ্রেডকে অনির্দিষ্টকালের জন্য তার ক্রিয়াকলাপগুলি পুনরায় চেষ্টা করতে বাধ্য করতে পারে [যদি তা হয় তবে এটি অপেক্ষা-মুক্ত নয়]।

লক-মুক্ত অ্যালগরিদমগুলির তাত্পর্যটির বেশিরভাগটি তা নয় যে তারা লক-মুক্ত অ্যালগরিদমগুলির চেয়ে দ্রুততর নয়, বরং সত্য যে কোনও থ্রেড ওয়াইলেয়েড পেলে তারা মারা যাওয়ার ঝুঁকিতে নেই [নোট করুন যে এই ধরনের গ্যারান্টি কেবল প্রয়োজন যে অ্যালগোরিদমগুলি অবরুদ্ধ নয়, তবে সমস্ত লক-ফ্রি অ্যালগোরিদম হ'ল]। লক-মুক্ত অ্যালগরিদমের পক্ষে লকগুলি ব্যবহার করা সম্ভব, তবে কেবল যদি লক-অধিগ্রহণের প্রচেষ্টাতে অ্যালগরিদমের পাশাপাশি সময়সীমা অন্তর্ভুক্ত হয় তবে এটি নিশ্চিত করা যে কারও পক্ষে সর্বদা অগ্রগতি সম্ভব হবে (উদাহরণস্বরূপ, অ্যালগরিদম একটি CompareExchangeলুপটিকে প্রাথমিক হিসাবে ব্যবহার করতে পারে আরবিট্রেশন পদ্ধতিতে, তবে বিতর্কটি উচ্চতর মনে হলে অ্যাক্সেসকে সালিশ করার জন্য লকগুলি ব্যবহার করুন; যদি কোনও লক অতিরিক্ত দীর্ঘ ধরে রাখা হয় বলে মনে হয়, অন্য থ্রেডগুলি সেই লকটি ব্যবহার করার প্রচেষ্টা ত্যাগ করার পরিবর্তে একটি নতুন তৈরি করার সিদ্ধান্ত নিতে পারে।CompareExchange, গ্রাহকরা লকটি পরিত্যাগ করা সিস্টেমের ধারাবাহিকতার ক্ষতি করবে না, যদিও এর অর্থ এই হতে পারে যে পুরানো লকটি ধরে রাখা কোডটি খুব পুরানো লকটি ত্যাগ না করে এবং নতুনটির জন্য লাইনে না আসা পর্যন্ত কোনও কাজই করবে না।


এটি স্ট্যান্ডার্ড পরিভাষা থেকে পৃথক: আপনার ২ টি অ-ব্লক করার মানক বোঝায় যেখানে ৩ টি লক স্বাধীনতা বোঝায়।
মার্কো টপলনিক

আমি বেমানান পরিভাষা ব্যবহারগুলি দেখেছি এবং আমি কোনও "অফিসিয়াল" মান জানি না। সবচেয়ে গুরুত্বপূর্ণটি হ'ল একটি অ্যালগরিদম অফার করতে সক্ষম হতে পারে তার বিভিন্ন গ্যারান্টি রয়েছে এবং অ্যাপ্লিকেশন প্রয়োজনীয়তা মেটাতে যথেষ্ট গ্যারান্টি দেয় এমন একটি অ্যালগরিদম ব্যবহার করা গুরুত্বপূর্ণ। অনেকগুলি কাগজপত্রে উপরের কয়েকটি গ্যারান্টিকে কেবল কভার করে থাকে তবে এমন কয়েকটি ক্ষেত্রে রয়েছে যেগুলি প্রত্যেকে প্রয়োজনীয়তা পূরণ করতে পারে এমন অন্যান্য গ্যারান্টির চেয়ে সহজেই আবেদনের প্রয়োজনীয়তাগুলি পূরণ করতে সক্ষম হতে পারে।
সুপারক্যাট

আমি মনে করি যে একটি sensক্যমত্য আছে যে মাল্টিপ্রসেসর প্রোগ্রামিং আর্ট অফ উপস্থাপিত পরিভাষা "মান"।
মার্কো টপলনিক

@ মার্কো টপলনিক: আমি পোস্টটি সম্পাদনা করব তারপরে এটি ফিট করার জন্য। আপনি কি নতুন সংস্করণ পছন্দ করেন ?.
সুপারক্যাট

দুর্দান্ত, খুব সুন্দর
মার্কো তোপোলনিক

4

আপনাকে "সংজ্ঞা" দেখতে হবে যা আপনি প্রসঙ্গে উদ্ধৃত করেছেন :

ভাগ করে নেওয়া ডেটা স্ট্রাকচার বাস্তবায়নের wayতিহ্যগত উপায় হ'ল পারস্পরিক বর্জন (লক) ব্যবহার করা যাতে একযোগে অপারেশনগুলি একে অপরের সাথে হস্তক্ষেপ না করে তা নিশ্চিত করে। লকিংয়ের সফটওয়্যার ইঞ্জিনিয়ারিং, ত্রুটি-সহনশীলতা এবং স্কেলাবিলিটি (দেখুন [8]) এর সাথে সম্পর্কিত অনেকগুলি অসুবিধা রয়েছে। প্রতিক্রিয়া হিসাবে, গবেষকরা পারস্পরিক বর্জন নিয়োগ দেয় না যে বিভিন্ন বিকল্প সমন্বয় কৌশল বিভিন্ন অনুসন্ধান করেছেন । একটি সিঙ্ক্রোনাইজেশন কৌশল অপেক্ষা-মুক্ত, যদি এটি নিশ্চিত করে যে প্রতিটি থ্রেড অন্য থ্রেডের স্বেচ্ছাসেবী বিলম্বের (বা এমনকি ব্যর্থতা) মোকাবেলা করতে অগ্রসর হতে থাকবে। এটি লক-মুক্ত এটি যদি কেবলমাত্র কিছু থ্রেড সর্বদা অগ্রগতি করে তা নিশ্চিত করে।

আপনি পারস্পরিক বর্জনের জন্য লক ব্যবহার করছেন, সুতরাং এটি কোনও লক-মুক্ত কৌশল নয় যার বিষয়ে তারা কথা বলছেন।


2

আমি যদি লক ব্যবহার করি তবে আমার অ্যালগরিদমটি কি এখনও লক-মুক্ত থাকতে পারে?

এটি হতে পারে তবে এটি অ্যালগরিদমের উপর নির্ভর করে।

যদি আমার কাছে কোনও লাউ দ্বারা সুরক্ষিত কাতারের মতো একটি সাধারণ ডেটা স্ট্রাকচার থাকে তবে একটি প্রক্রিয়া সর্বদা অগ্রগতি করতে পারে যেমন একটি প্রক্রিয়া লকটি অর্জন করতে পারে, যা চায় তা করতে পারে এবং ছেড়ে দিতে পারে।

সুতরাং এটি লক-ফ্রি সংজ্ঞা পূরণ করে?

নোট প্রতি সে

যদি "এটি যা চায় তা করুন" পদক্ষেপে যদি অন্য কোনও লক অর্জনের সাথে জড়িত না থাকে এবং এটি একটি সীমাবদ্ধ সময়ের মধ্যেই সম্পন্ন করার গ্যারান্টিযুক্ত হয়, তবে আপনার অ্যালগরিদমের এই বিশেষ অংশটি অচলাবস্থা মুক্ত থাকবে।

তবে, যদি পূর্ব শর্তগুলি সন্তুষ্ট না হয় তবে কমপক্ষে অচলাবরণের সম্ভাবনা আছে ...


আর্ট অফ মাল্টিপ্রসেসর প্রোগ্রামিং-এর পাঠ্যের কিছু অধ্যয়নের পরে আমি এই সিদ্ধান্তে পৌঁছেছি যে মুটিেক্সগুলি অবশ্যই লক-ফ্রি সংজ্ঞাটিকে অকার্যকর করে দেয়, যখন সংজ্ঞাটি সঠিকভাবে বানান হয়। এটি পরিষ্কার করার জন্য আমি এই পৃষ্ঠায় একটি উত্তর যুক্ত করেছি।
মার্কো টপলনিক

1

আপনার দেওয়া উদাহরণটি নীচের কারণে লক-মুক্ত নয় free

সমর্থন একটি থ্রেড লকটি অর্জন করে, এবং ওএস শিডিয়ুলারটি অসীম একাকী সময়ের জন্য থ্রেড স্থগিত করে, তারপরে সমস্ত থ্রেড অগ্রগতি করতে পারে না কারণ স্থগিত থ্রেড দ্বারা অর্জিত লকটি কোনও অর্জন করতে পারে না।

সাধারণত বললে, অ্যালগরিদমগুলি যে লকগুলি ব্যবহার করে সেগুলি লক-মুক্ত নয়।

নোট করুন যে অচলাবস্থা এবং লক-ফ্রি দুটি ভিন্ন ধারণা cep ডেডলক-মুক্ত মানে অচলাবস্থার কোনও সম্ভাবনা নেই তবে এমন লাইভলক থাকতে পারে যা পুরো সিস্টেমকে অগ্রগতি হতে আটকাতে পারে। লক-স্বাধীনতা তার চেয়ে বেশি শক্তিশালী কারণ এর অর্থ সিস্টেমের কিছু থ্রেড সবসময় সীমাবদ্ধ সংখ্যক পদক্ষেপ নিয়ে অগ্রগতি করে।


উইকিপিডিয়ায় আরও সতর্ক সংজ্ঞাটি দেখুন: "একটি অ্যালগরিদম লক-ফ্রি হয় যদি এটি সন্তুষ্ট হয় যে প্রোগ্রামের থ্রেডগুলি যথেষ্ট দীর্ঘায়িত হয় তখন কমপক্ষে একটি থ্রেড অগ্রগতি করে।" এটি থ্রেড থামানোর ক্ষেত্রে বাদ দেয়। এছাড়াও থমকে থাকা অগ্রগতি বাধাদানের স্বাধীনতা দ্বারা আচ্ছাদিত , স্বাধীনতা লক করে না ।
মার্কো টপলনিক

@ মারকোটোপলনিক আপনার মন্তব্যটি মোটেই বোঝা যায় না। লক-স্বাধীনতা বাধা-স্বাধীনতা জুড়ে। লক-মুক্ত এমন যে কোনও কিছু অবশ্যই বাধা মুক্ত থাকতে হবে। এবং আপনি যে সংজ্ঞাটি দিয়েছেন তা থেমে থাকা থ্রেডকে বাদ দেয় না।
চৌওরান

"বুদ্ধিমান" কে "সঠিক হওয়া" থেকে আলাদা করার জন্য দয়া করে যত্ন নিন। আমার মন্তব্যটি ভুল, যেমনটি পরবর্তী উত্তর থেকে দেখা যায়। তবে উইকিপিডিয়া সংজ্ঞাটিও ভুল বা কমপক্ষে অস্পষ্ট।
মার্কো টপলনিক

@ মার্কো টপলনিক যেহেতু আপনি স্বীকার করেছেন যে আপনার মন্তব্যটি সঠিক নয়, তাই আপনাকে অন্য পাঠকদের বিভ্রান্ত না করার জন্য এটি সরিয়ে নেওয়া উচিত। উইকিপিডিয়া প্রায়শই ভুল বা অস্পষ্ট থাকে। Cs.rochester.edu/~scott/papers/2006_PPoPP_synch_queues.pdf এর মতো একাডেমিক কাগজগুলিতে আপনার "লক-স্বাধীনতা" এর মতো সূক্ষ্ম সংজ্ঞাগুলি খুঁজে পাওয়া উচিত (লক-ফ্রি সংজ্ঞাটি বিভাগের ২.১ এ রয়েছে)
চওরণ

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