{"id":3347,"date":"2025-06-07T04:23:59","date_gmt":"2025-06-07T04:23:59","guid":{"rendered":"https:\/\/diznr.com\/?p=3347"},"modified":"2025-06-07T04:23:59","modified_gmt":"2025-06-07T04:23:59","slug":"critical-section-problem-with-two-process-solution-algo-1-deckers-solution-alteration-strict","status":"publish","type":"post","link":"https:\/\/www.reilsolar.com\/pdf\/critical-section-problem-with-two-process-solution-algo-1-deckers-solution-alteration-strict\/","title":{"rendered":"Critical Section Problem With Two Process Solution (Algo-1) Deckers solution, Strict Alteration."},"content":{"rendered":"<p>Critical Section Problem With Two Process Solution (Algo-1) Deckers solution, Strict Alteration.<\/p>\n<p>[fvplayer id=&#8221;364&#8243;]<\/p>\n<p data-start=\"0\" data-end=\"333\">The <strong data-start=\"4\" data-end=\"32\">Critical Section Problem<\/strong> is a classic problem in operating systems and concurrent programming, where multiple processes need to access shared resources without causing data inconsistencies. One of the earliest solutions for two-process synchronization is <strong data-start=\"263\" data-end=\"285\">Strict Alternation<\/strong>, also known as <strong data-start=\"301\" data-end=\"332\">Dekker\u2019s Algorithm (Algo-1)<\/strong>.<\/p>\n<h3 data-start=\"340\" data-end=\"389\"><strong data-start=\"344\" data-end=\"389\">Strict Alternation Solution (Algorithm-1)<\/strong><\/h3>\n<p data-start=\"390\" data-end=\"532\"><strong data-start=\"390\" data-end=\"402\">Concept:<\/strong><br data-start=\"402\" data-end=\"405\" \/>In the strict alternation method, processes take turns to enter their critical section by maintaining a shared variable <code data-start=\"525\" data-end=\"531\">turn<\/code>.<\/p>\n<h4 data-start=\"534\" data-end=\"552\"><strong data-start=\"539\" data-end=\"552\">Algorithm<\/strong><\/h4>\n<p data-start=\"553\" data-end=\"557\">Let:<\/p>\n<ul data-start=\"558\" data-end=\"658\">\n<li data-start=\"558\" data-end=\"620\"><code data-start=\"560\" data-end=\"566\">turn<\/code> be a shared variable that alternates between 0 and 1.<\/li>\n<li data-start=\"621\" data-end=\"658\"><code data-start=\"623\" data-end=\"627\">P0<\/code> and <code data-start=\"632\" data-end=\"636\">P1<\/code> be the two processes.<\/li>\n<\/ul>\n<ol data-start=\"660\" data-end=\"962\">\n<li data-start=\"660\" data-end=\"810\">\n<p data-start=\"663\" data-end=\"678\"><strong data-start=\"663\" data-end=\"678\">Process P0:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"sticky top-9\"><\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre language-c\"><span class=\"hljs-keyword\">while<\/span> (turn != <span class=\"hljs-number\">0<\/span>);  <span class=\"hljs-comment\">\/\/ Wait until it's P0's turn<\/span><br \/>\n<span class=\"hljs-comment\">\/\/ Critical Section<\/span><br \/>\nturn = <span class=\"hljs-number\">1<\/span>;           <span class=\"hljs-comment\">\/\/ Give turn to P1<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<\/li>\n<li data-start=\"812\" data-end=\"962\">\n<p data-start=\"815\" data-end=\"830\"><strong data-start=\"815\" data-end=\"830\">Process P1:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"sticky top-9\"><\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre language-c\"><span class=\"hljs-keyword\">while<\/span> (turn != <span class=\"hljs-number\">1<\/span>);  <span class=\"hljs-comment\">\/\/ Wait until it's P1's turn<\/span><br \/>\n<span class=\"hljs-comment\">\/\/ Critical Section<\/span><br \/>\nturn = <span class=\"hljs-number\">0<\/span>;           <span class=\"hljs-comment\">\/\/ Give turn to P0<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<\/li>\n<\/ol>\n<h3 data-start=\"969\" data-end=\"1007\"><strong data-start=\"973\" data-end=\"1007\">Issues with Strict Alternation<\/strong><\/h3>\n<h3 data-start=\"969\" data-end=\"1007\"><strong style=\"font-size: 16px\" data-start=\"1011\" data-end=\"1032\">Lack of Progress:<\/strong><\/h3>\n<ol data-start=\"1008\" data-end=\"1398\">\n<li data-start=\"1008\" data-end=\"1176\">\n<ul data-start=\"1038\" data-end=\"1176\">\n<li data-start=\"1038\" data-end=\"1173\">If one process does not need to enter its critical section, the other process is still forced to wait, leading to unnecessary delays.<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"1177\" data-end=\"1292\"><strong data-start=\"1180\" data-end=\"1197\">Busy Waiting:<\/strong>\n<ul data-start=\"1203\" data-end=\"1292\">\n<li data-start=\"1203\" data-end=\"1289\">The waiting process continuously checks the value of <code data-start=\"1258\" data-end=\"1264\">turn<\/code>, leading to CPU wastage.<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"1293\" data-end=\"1398\"><strong data-start=\"1296\" data-end=\"1321\">Not Truly Concurrent:<\/strong>\n<ul data-start=\"1327\" data-end=\"1398\">\n<li data-start=\"1327\" data-end=\"1398\">A process can be blocked even when the critical section is available.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 data-start=\"1405\" data-end=\"1450\"><strong data-start=\"1409\" data-end=\"1450\">Improved Solution: Dekker\u2019s Algorithm<\/strong><\/h3>\n<p data-start=\"1451\" data-end=\"1650\">To overcome the drawbacks of strict alternation, <strong data-start=\"1500\" data-end=\"1522\">Dekker&#8217;s Algorithm<\/strong> introduces an additional mechanism using flags (<code data-start=\"1571\" data-end=\"1580\">flag[0]<\/code> and <code data-start=\"1585\" data-end=\"1594\">flag[1]<\/code>) to ensure mutual exclusion while allowing flexibility.<\/p>\n<p data-start=\"1652\" data-end=\"1780\" data-is-last-node=\"\" data-is-only-node=\"\">Would you like a detailed explanation of <strong data-start=\"1693\" data-end=\"1715\">Dekker\u2019s Algorithm<\/strong> or other alternative solutions like <strong data-start=\"1752\" data-end=\"1776\">Peterson\u2019s Algorithm<\/strong>?<\/p>\n<p data-start=\"0\" data-end=\"184\">The <strong data-start=\"4\" data-end=\"32\">Critical Section Problem<\/strong> arises in <strong data-start=\"43\" data-end=\"69\">concurrent programming<\/strong> when two or more processes need <strong data-start=\"102\" data-end=\"129\">mutual exclusive access<\/strong> to a <strong data-start=\"135\" data-end=\"154\">shared resource<\/strong> (like a variable or a file).<\/p>\n<p data-start=\"186\" data-end=\"349\">Here\u2019s a breakdown of <strong data-start=\"208\" data-end=\"243\">Algorithm 1: Strict Alternation<\/strong> and <strong data-start=\"248\" data-end=\"270\">Dekker\u2019s Algorithm<\/strong>, which are classic solutions for the <strong data-start=\"308\" data-end=\"348\">two-process critical section problem<\/strong>.<\/p>\n<hr data-start=\"351\" data-end=\"354\" \/>\n<h2 data-start=\"356\" data-end=\"396\">\u2705 Goal of a Critical Section Solution<\/h2>\n<p data-start=\"397\" data-end=\"441\">A good algorithm must satisfy the following:<\/p>\n<ol data-start=\"442\" data-end=\"700\">\n<li data-start=\"442\" data-end=\"519\">\n<p data-start=\"445\" data-end=\"519\"><strong data-start=\"445\" data-end=\"465\">Mutual Exclusion<\/strong> \u2013 Only one process in the critical section at a time.<\/p>\n<\/li>\n<li data-start=\"520\" data-end=\"619\">\n<p data-start=\"523\" data-end=\"619\"><strong data-start=\"523\" data-end=\"535\">Progress<\/strong> \u2013 If no process is in the critical section, one of the waiting processes can enter.<\/p>\n<\/li>\n<li data-start=\"620\" data-end=\"700\">\n<p data-start=\"623\" data-end=\"700\"><strong data-start=\"623\" data-end=\"642\">Bounded Waiting<\/strong> \u2013 No process waits forever to enter its critical section.<\/p>\n<\/li>\n<\/ol>\n<hr data-start=\"702\" data-end=\"705\" \/>\n<h2 data-start=\"707\" data-end=\"752\">\ud83d\udd39 <strong data-start=\"713\" data-end=\"752\">1. Strict Alternation (Algorithm 1)<\/strong><\/h2>\n<p data-start=\"753\" data-end=\"805\">This is the simplest solution but <strong data-start=\"787\" data-end=\"804\">not efficient<\/strong>.<\/p>\n<h3 data-start=\"807\" data-end=\"823\">\ud83d\udd27 <strong data-start=\"814\" data-end=\"823\">Idea:<\/strong><\/h3>\n<p data-start=\"824\" data-end=\"897\">A shared variable <code data-start=\"842\" data-end=\"848\">turn<\/code> is used to strictly alternate between processes.<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">c<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"Copy\">Copy<\/button><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">Edit<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\">\n<p><code class=\"whitespace-pre! language-c\"><span class=\"hljs-type\">int<\/span> turn = <span class=\"hljs-number\">0<\/span>;  <span class=\"hljs-comment\">\/\/ Shared variable<\/span><\/code><\/p>\n<p><span class=\"hljs-comment\">\/\/ Process P0<\/span><br \/>\n<span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {<br \/>\n<span class=\"hljs-keyword\">while<\/span> (turn != <span class=\"hljs-number\">0<\/span>); <span class=\"hljs-comment\">\/\/ Wait<\/span><br \/>\n<span class=\"hljs-comment\">\/\/ Critical Section<\/span><br \/>\n&#8230;<br \/>\nturn = <span class=\"hljs-number\">1<\/span>; <span class=\"hljs-comment\">\/\/ Give turn to P1<\/span><br \/>\n<span class=\"hljs-comment\">\/\/ Remainder Section<\/span><br \/>\n}<\/p>\n<p><span class=\"hljs-comment\">\/\/ Process P1<\/span><br \/>\n<span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {<br \/>\n<span class=\"hljs-keyword\">while<\/span> (turn != <span class=\"hljs-number\">1<\/span>); <span class=\"hljs-comment\">\/\/ Wait<\/span><br \/>\n<span class=\"hljs-comment\">\/\/ Critical Section<\/span><br \/>\n&#8230;<br \/>\nturn = <span class=\"hljs-number\">0<\/span>; <span class=\"hljs-comment\">\/\/ Give turn to P0<\/span><br \/>\n<span class=\"hljs-comment\">\/\/ Remainder Section<\/span><br \/>\n}<\/p>\n<\/div>\n<\/div>\n<h3 data-start=\"1287\" data-end=\"1308\">\u26a0\ufe0f <strong data-start=\"1294\" data-end=\"1308\">Drawbacks:<\/strong><\/h3>\n<ul data-start=\"1309\" data-end=\"1438\">\n<li data-start=\"1309\" data-end=\"1344\">\n<p data-start=\"1311\" data-end=\"1344\">Fails the <strong data-start=\"1321\" data-end=\"1333\">progress<\/strong> condition.<\/p>\n<\/li>\n<li data-start=\"1345\" data-end=\"1438\">\n<p data-start=\"1347\" data-end=\"1438\">A process might have to <strong data-start=\"1371\" data-end=\"1393\">wait unnecessarily<\/strong> even if the other process is not interested.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"1440\" data-end=\"1443\" \/>\n<h2 data-start=\"1445\" data-end=\"1476\">\ud83d\udd39 <strong data-start=\"1451\" data-end=\"1476\">2. Dekker\u2019s Algorithm<\/strong><\/h2>\n<p data-start=\"1477\" data-end=\"1582\">One of the earliest correct solutions for two processes using only shared memory and no special hardware.<\/p>\n<h3 data-start=\"1584\" data-end=\"1600\">\ud83d\udd27 <strong data-start=\"1591\" data-end=\"1600\">Idea:<\/strong><\/h3>\n<p data-start=\"1601\" data-end=\"1748\">Each process expresses its desire to enter the critical section using a flag. If both want to enter, use the <code data-start=\"1710\" data-end=\"1716\">turn<\/code> variable to decide who gets in.<\/p>\n<h3 data-start=\"1750\" data-end=\"1778\">\ud83e\udde0 <strong data-start=\"1757\" data-end=\"1778\">Shared Variables:<\/strong><\/h3>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">c<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"Copy\">Copy<\/button><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">Edit<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-c\">boolean flag[<span class=\"hljs-number\">2<\/span>] = {<span class=\"hljs-literal\">false<\/span>, <span class=\"hljs-literal\">false<\/span>};  <span class=\"hljs-comment\">\/\/ flag[i] = true means Pi wants to enter<\/span><br \/>\n<span class=\"hljs-type\">int<\/span> turn = <span class=\"hljs-number\">0<\/span>;                      <span class=\"hljs-comment\">\/\/ Whose turn is it?<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<h3 data-start=\"1922\" data-end=\"1947\">\ud83d\udc68\u200d\ud83d\udcbb <strong data-start=\"1932\" data-end=\"1947\">Process P0:<\/strong><\/h3>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">c<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"Copy\">Copy<\/button><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">Edit<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-c\"><span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {<br \/>\nflag[<span class=\"hljs-number\">0<\/span>] = <span class=\"hljs-literal\">true<\/span>;<br \/>\n<span class=\"hljs-keyword\">while<\/span> (flag[<span class=\"hljs-number\">1<\/span>]) {<br \/>\n<span class=\"hljs-keyword\">if<\/span> (turn != <span class=\"hljs-number\">0<\/span>) {<br \/>\nflag[<span class=\"hljs-number\">0<\/span>] = <span class=\"hljs-literal\">false<\/span>;<br \/>\n<span class=\"hljs-keyword\">while<\/span> (turn != <span class=\"hljs-number\">0<\/span>);<br \/>\nflag[<span class=\"hljs-number\">0<\/span>] = <span class=\"hljs-literal\">true<\/span>;<br \/>\n}<br \/>\n}<br \/>\n<span class=\"hljs-comment\">\/\/ Critical Section<\/span><br \/>\n...<br \/>\nturn = <span class=\"hljs-number\">1<\/span>;<br \/>\nflag[<span class=\"hljs-number\">0<\/span>] = <span class=\"hljs-literal\">false<\/span>;<br \/>\n<span class=\"hljs-comment\">\/\/ Remainder Section<\/span><br \/>\n}<br \/>\n<\/code><\/div>\n<\/div>\n<h3 data-start=\"2238\" data-end=\"2263\">\ud83d\udc68\u200d\ud83d\udcbb <strong data-start=\"2248\" data-end=\"2263\">Process P1:<\/strong><\/h3>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">c<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"Copy\">Copy<\/button><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">Edit<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-c\"><span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {<br \/>\nflag[<span class=\"hljs-number\">1<\/span>] = <span class=\"hljs-literal\">true<\/span>;<br \/>\n<span class=\"hljs-keyword\">while<\/span> (flag[<span class=\"hljs-number\">0<\/span>]) {<br \/>\n<span class=\"hljs-keyword\">if<\/span> (turn != <span class=\"hljs-number\">1<\/span>) {<br \/>\nflag[<span class=\"hljs-number\">1<\/span>] = <span class=\"hljs-literal\">false<\/span>;<br \/>\n<span class=\"hljs-keyword\">while<\/span> (turn != <span class=\"hljs-number\">1<\/span>);<br \/>\nflag[<span class=\"hljs-number\">1<\/span>] = <span class=\"hljs-literal\">true<\/span>;<br \/>\n}<br \/>\n}<br \/>\n<span class=\"hljs-comment\">\/\/ Critical Section<\/span><br \/>\n...<br \/>\nturn = <span class=\"hljs-number\">0<\/span>;<br \/>\nflag[<span class=\"hljs-number\">1<\/span>] = <span class=\"hljs-literal\">false<\/span>;<br \/>\n<span class=\"hljs-comment\">\/\/ Remainder Section<\/span><br \/>\n}<br \/>\n<\/code><\/div>\n<\/div>\n<hr data-start=\"2554\" data-end=\"2557\" \/>\n<h2 data-start=\"2559\" data-end=\"2594\">\u2705 Dekker&#8217;s Algorithm: Advantages<\/h2>\n<ul data-start=\"2595\" data-end=\"2684\">\n<li data-start=\"2595\" data-end=\"2627\">\n<p data-start=\"2597\" data-end=\"2627\">Satisfies <strong data-start=\"2607\" data-end=\"2627\">Mutual Exclusion<\/strong><\/p>\n<\/li>\n<li data-start=\"2628\" data-end=\"2652\">\n<p data-start=\"2630\" data-end=\"2652\">Satisfies <strong data-start=\"2640\" data-end=\"2652\">Progress<\/strong><\/p>\n<\/li>\n<li data-start=\"2653\" data-end=\"2684\">\n<p data-start=\"2655\" data-end=\"2684\">Satisfies <strong data-start=\"2665\" data-end=\"2684\">Bounded Waiting<\/strong><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"2686\" data-end=\"2689\" \/>\n<h2 data-start=\"2691\" data-end=\"2704\">\ud83e\uddfe Summary<\/h2>\n<div class=\"_tableContainer_16hzy_1\">\n<div class=\"_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"2706\" data-end=\"3164\">\n<thead data-start=\"2706\" data-end=\"2777\">\n<tr data-start=\"2706\" data-end=\"2777\">\n<th data-start=\"2706\" data-end=\"2724\" data-col-size=\"sm\">Feature<\/th>\n<th data-start=\"2724\" data-end=\"2751\" data-col-size=\"sm\">Strict Alternation<\/th>\n<th data-start=\"2751\" data-end=\"2777\" data-col-size=\"sm\">Dekker\u2019s Algorithm<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2851\" data-end=\"3164\">\n<tr data-start=\"2851\" data-end=\"2922\">\n<td data-start=\"2851\" data-end=\"2870\" data-col-size=\"sm\">Mutual Exclusion<\/td>\n<td data-col-size=\"sm\" data-start=\"2870\" data-end=\"2896\">\u2705 Yes<\/td>\n<td data-col-size=\"sm\" data-start=\"2896\" data-end=\"2922\">\u2705 Yes<\/td>\n<\/tr>\n<tr data-start=\"2923\" data-end=\"2994\">\n<td data-start=\"2923\" data-end=\"2942\" data-col-size=\"sm\">Progress<\/td>\n<td data-col-size=\"sm\" data-start=\"2942\" data-end=\"2968\">\u274c No<\/td>\n<td data-col-size=\"sm\" data-start=\"2968\" data-end=\"2994\">\u2705 Yes<\/td>\n<\/tr>\n<tr data-start=\"2995\" data-end=\"3066\">\n<td data-start=\"2995\" data-end=\"3014\" data-col-size=\"sm\">Bounded Waiting<\/td>\n<td data-col-size=\"sm\" data-start=\"3014\" data-end=\"3040\">\u2705 Yes<\/td>\n<td data-col-size=\"sm\" data-start=\"3040\" data-end=\"3066\">\u2705 Yes<\/td>\n<\/tr>\n<tr data-start=\"3067\" data-end=\"3164\">\n<td data-start=\"3067\" data-end=\"3086\" data-col-size=\"sm\">Efficiency<\/td>\n<td data-col-size=\"sm\" data-start=\"3086\" data-end=\"3128\">\u274c Inefficient (can block unnecessarily)<\/td>\n<td data-col-size=\"sm\" data-start=\"3128\" data-end=\"3164\">\u2705 Efficient in terms of fairness<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sticky end-(--thread-content-margin) h-0 self-end select-none\">\n<div class=\"absolute end-0 flex items-end\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<hr data-start=\"3166\" data-end=\"3169\" \/>\n<p data-start=\"3171\" data-end=\"3264\" data-is-last-node=\"\" data-is-only-node=\"\">Would you like a diagram, animation, or a code simulation to visualize these concepts better?<\/p>\n<h3 data-start=\"3171\" data-end=\"3264\"><a href=\"https:\/\/www.cs.ucf.edu\/courses\/cop4600\/sum2007\/files\/os_lec_09_concurrency_sw.pdf\" target=\"_blank\" rel=\"noopener\">Critical Section Problem With Two Process Solution (Algo-1) Deckers solution, Strict Alteration.<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/euroasiapub.org\/wp-content\/uploads\/2016\/09\/5-108.pdf\" target=\"_blank\" rel=\"noopener\">IJRIM Volume 2, Issue 5 (May 2012) (ISSN 2231-4334)<\/a><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Critical Section Problem With Two Process Solution (Algo-1) Deckers solution, Strict Alteration. [fvplayer id=&#8221;364&#8243;] The Critical Section Problem is a classic problem in operating systems and concurrent programming, where multiple processes need to access shared resources without causing data inconsistencies. One of the earliest solutions for two-process synchronization is Strict Alternation, also known as Dekker\u2019s [&hellip;]<\/p>\n","protected":false},"author":66,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78],"tags":[],"class_list":["post-3347","post","type-post","status-publish","format-standard","hentry","category-operating-system"],"_links":{"self":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/3347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/users\/66"}],"replies":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/comments?post=3347"}],"version-history":[{"count":0,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/3347\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media?parent=3347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/categories?post=3347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/tags?post=3347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}