Non-blocking algorithm
ಕಂಪ್ಯೂಟರ್ ವಿಜ್ಞಾನದಲ್ಲಿ, ಯಾವುದೇ ಥ್ರೆಡ್ನ ವೈಫಲ್ಯ ಅಥವಾ ಅಮಾನತು ಮತ್ತೊಂದು ಥ್ರೆಡ್ನ ವೈಫಲ್ಯ ಅಥವಾ ಅಮಾನತಿಗೆ ಕಾರಣವಾಗದಿದ್ದರೆ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ನಾನ್-ಬ್ಲಾಕಿಂಗ್ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ; ಕೆಲವು ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ, ಈ ಅಲ್ಗಾರಿದಮ್ಗಳು ಸಾಂಪ್ರದಾಯಿಕ ಬ್ಲಾಕಿಂಗ್ ಅನುಷ್ಠಾನಗಳಿಗೆ ಉಪಯುಕ್ತ ಪರ್ಯಾಯವನ್ನು ಒದಗಿಸುತ್ತವೆ. ವ್ಯವಸ್ಥೆಯಾದ್ಯಂತ ಪ್ರಗತಿಯನ್ನು ಖಾತರಿಪಡಿಸಿದರೆ ನಿರ್ಬಂಧಿಸದ ಅಲ್ಗಾರಿದಮ್ ಲಾಕ್-ಫ್ರೀ ಆಗಿರುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ಥ್ರೆಡ್ ಪ್ರಗತಿಯನ್ನು ಖಾತರಿಪಡಿಸಿದರೆ ಕಾಯುವಂತಿಲ್ಲ. 2003ರಲ್ಲಿ ಅಡಚಣೆ-ಸ್ವಾತಂತ್ರ್ಯವನ್ನು ಪರಿಚಯಿಸುವವರೆಗೂ ಸಾಹಿತ್ಯದಲ್ಲಿ "ನಿರ್ಬಂಧಿಸದಿರುವುದು" ಎಂಬ ಪದವನ್ನು "ಲಾಕ್-ಫ್ರೀ" ಎಂಬ ಸಮಾನಾರ್ಥಕ ಪದವಾಗಿ ಬಳಸಲಾಗುತ್ತಿತ್ತು. "ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕರೆಗಳನ್ನು ಮರುಹೊಂದಿಸದೆಯೇ" ರಿಲೇಗಳ ಮೂಲಕ ಸಂಪರ್ಕವನ್ನು ರವಾನಿಸಬಲ್ಲ ದೂರಸಂಪರ್ಕ ಜಾಲಗಳನ್ನು ವಿವರಿಸಲು "ತಡೆರಹಿತ" ಎಂಬ ಪದವನ್ನು ಸಾಂಪ್ರದಾಯಿಕವಾಗಿ ಬಳಸಲಾಗುತ್ತಿತ್ತು (ಕ್ಲೋಸ್ ಜಾಲವನ್ನು ನೋಡಿ). ಅಲ್ಲದೆ, ದೂರವಾಣಿ ವಿನಿಮಯವು "ದೋಷಪೂರಿತವಾಗಿಲ್ಲದಿದ್ದರೆ, ಅದು ಯಾವಾಗಲೂ ಸಂಪರ್ಕವನ್ನು ಮಾಡಬಹುದು" (ಕನಿಷ್ಠ ಸ್ಪ್ಯಾನಿಂಗ್ ಸ್ವಿಚ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸದಿರುವುದನ್ನು ನೋಡಿ). ಪ್ರೇರಣೆ ಬಹು-ಥ್ರೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ಗೆ ಸಾಂಪ್ರದಾಯಿಕ ವಿಧಾನವೆಂದರೆ ಹಂಚಿದ ಸಂಪನ್ಮೂಲಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಸಿಂಕ್ರೊನೈಸ್ ಮಾಡಲು ಲಾಕ್ಗಳನ್ನು ಬಳಸುವುದು. ಮ್ಯೂಟೆಕ್ಸ್ಗಳು, ಸೆಮಾಫೋರ್ಗಳು ಮತ್ತು ನಿರ್ಣಾಯಕ ವಿಭಾಗಗಳಂತಹ ಸಿಂಕ್ರೊನೈಸೇಶನ್ ಪ್ರಿಮಿಟಿವ್ಗಳು ಎಲ್ಲಾ ಕಾರ್ಯವಿಧಾನಗಳಾಗಿದ್ದು, ಹಾಗೆ ಮಾಡಿದರೆ ಹಂಚಿದ ಮೆಮೊರಿ ರಚನೆಗಳನ್ನು ಭ್ರಷ್ಟಗೊಳಿಸಿದರೆ, ಕೋಡ್ನ ಕೆಲವು ವಿಭಾಗಗಳು ಏಕಕಾಲದಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳ್ಳುವುದಿಲ್ಲ ಎಂದು ಪ್ರೋಗ್ರಾಮರ್ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು. ಒಂದು ದಾರವು ಈಗಾಗಲೇ ಮತ್ತೊಂದು ದಾರದಿಂದ ಹಿಡಿದಿರುವ ಬೀಗವನ್ನು ಪಡೆಯಲು ಪ್ರಯತ್ನಿಸಿದರೆ, ಬೀಗವು ಮುಕ್ತವಾಗುವವರೆಗೆ ದಾರವು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. ದಾರವನ್ನು ನಿರ್ಬಂಧಿಸುವುದು ಅನೇಕ ಕಾರಣಗಳಿಂದ ಅನಪೇಕ್ಷಿತವಾಗಿರಬಹುದು. ಒಂದು ಸ್ಪಷ್ಟವಾದ ಕಾರಣವೆಂದರೆ ದಾರವನ್ನು ನಿರ್ಬಂಧಿಸಿದಾಗ, ಅದು ಏನನ್ನೂ ಸಾಧಿಸಲು ಸಾಧ್ಯವಿಲ್ಲಃ ನಿರ್ಬಂಧಿತ ದಾರವು ಹೆಚ್ಚಿನ ಆದ್ಯತೆಯ ಅಥವಾ ನೈಜ-ಸಮಯದ ಕಾರ್ಯವನ್ನು ಮಾಡುತ್ತಿದ್ದರೆ, ಅದರ ಪ್ರಗತಿಯನ್ನು ನಿಲ್ಲಿಸುವುದು ಹೆಚ್ಚು ಅನಪೇಕ್ಷಿತವಾಗಿರುತ್ತದೆ. ಇತರ ಸಮಸ್ಯೆಗಳು ಕಡಿಮೆ ಸ್ಪಷ್ಟವಾಗಿವೆ. ಉದಾಹರಣೆಗೆ, ಲಾಕ್ಗಳ ನಡುವಿನ ಕೆಲವು ಪರಸ್ಪರ ಕ್ರಿಯೆಗಳು ಡೆಡ್ಲಾಕ್, ಲೈವ್ಲಾಕ್ ಮತ್ತು ಆದ್ಯತೆಯ ವಿಲೋಮದಂತಹ ದೋಷ ಪರಿಸ್ಥಿತಿಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ಲಾಕ್ಗಳನ್ನು ಬಳಸುವುದು ಒರಟಾದ-ಧಾನ್ಯದ ಲಾಕಿಂಗ್ ನಡುವಿನ ವಿನಿಮಯವನ್ನು ಸಹ ಒಳಗೊಂಡಿರುತ್ತದೆ, ಇದು ಸಮಾನಾಂತರತೆಯ ಅವಕಾಶಗಳನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ, ಮತ್ತು ಸೂಕ್ಷ್ಮ-ಧಾನ್ಯದ ಲಾಕಿಂಗ್, ಇದಕ್ಕೆ ಹೆಚ್ಚು ಎಚ್ಚರಿಕೆಯ ವಿನ್ಯಾಸದ ಅಗತ್ಯವಿರುತ್ತದೆ, ಲಾಕಿಂಗ್ ಓವರ್ಹೆಡ್ ಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ ಮತ್ತು ದೋಷಗಳಿಗೆ ಹೆಚ್ಚು ಒಳಗಾಗುತ್ತದೆ. ನಿರ್ಬಂಧಿಸುವ ಕ್ರಮಾವಳಿಗಳಿಗಿಂತ ಭಿನ್ನವಾಗಿ, ನಿರ್ಬಂಧಿಸದ ಕ್ರಮಾವಳಿಗಳು ಈ ನ್ಯೂನತೆಗಳಿಂದ ಬಳಲುವುದಿಲ್ಲ, ಮತ್ತು ಜೊತೆಗೆ ಅಡ್ಡಿಪಡಿಸುವ ನಿರ್ವಾಹಕಗಳಲ್ಲಿ ಬಳಸಲು ಸುರಕ್ಷಿತವಾಗಿವೆಃ ಪೂರ್ವಭಾವಿ ದಾರವನ್ನು ಪುನರಾರಂಭಿಸಲಾಗದಿದ್ದರೂ ಸಹ, ಅದು ಇಲ್ಲದೆ ಪ್ರಗತಿಯು ಇನ್ನೂ ಸಾಧ್ಯವಿದೆ. ಇದಕ್ಕೆ ತದ್ವಿರುದ್ಧವಾಗಿ, ಪರಸ್ಪರ ಹೊರಗಿಡುವಿಕೆಯಿಂದ ರಕ್ಷಿಸಲ್ಪಟ್ಟ ಜಾಗತಿಕ ದತ್ತಾಂಶ ರಚನೆಗಳನ್ನು ಇಂಟರಪ್ಟ್ ಹ್ಯಾಂಡ್ಲರ್ನಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ಪೂರ್ವಭಾವಿ ಥ್ರೆಡ್ ಲಾಕ್ ಅನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಬಹುದು-ಆದರೆ ನಿರ್ಣಾಯಕ ವಿಭಾಗದ ಸಮಯದಲ್ಲಿ ಇಂಟರಪ್ಟ್ ವಿನಂತಿಯನ್ನು ಮರೆಮಾಚುವ ಮೂಲಕ ಇದನ್ನು ಸುಲಭವಾಗಿ ಸರಿಪಡಿಸಬಹುದು. ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು ಲಾಕ್-ಫ್ರೀ ದತ್ತಾಂಶ ರಚನೆಯನ್ನು ಬಳಸಬಹುದು. ಲಾಕ್-ಫ್ರೀ ದತ್ತಾಂಶ ರಚನೆಯು ಸರಣಿ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಬದಲು ಸಮಾನಾಂತರ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯಲ್ಲಿ ಕಳೆಯುವ ಸಮಯವನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ, ಮಲ್ಟಿ-ಕೋರ್ ಪ್ರೊಸೆಸರ್ನಲ್ಲಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಹಂಚಿದ ದತ್ತಾಂಶ ರಚನೆಯ ಪ್ರವೇಶವನ್ನು ಸುಸಂಬದ್ಧವಾಗಿ ಉಳಿಯಲು ಕ್ರಮಬದ್ಧಗೊಳಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ಕೆಲವು ವಿನಾಯಿತಿಗಳೊಂದಿಗೆ, ನಿರ್ಬಂಧಿಸದ ಕ್ರಮಾವಳಿಗಳು ಯಂತ್ರಾಂಶವು ಒದಗಿಸಬೇಕಾದ ಪರಮಾಣು ರೀಡ್-ಮೋಡಿಫೈ-ರೈಟ್ ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು ಬಳಸುತ್ತವೆ, ಅವುಗಳಲ್ಲಿ ಅತ್ಯಂತ ಗಮನಾರ್ಹವಾದದ್ದು ಹೋಲಿಕೆ ಮತ್ತು ವಿನಿಮಯ (ಸಿಎಎಸ್). ಕ್ರಿಟಿಕಲ್ ವಿಭಾಗಗಳನ್ನು ಬಹುತೇಕ ಯಾವಾಗಲೂ ಈ ಪ್ರಿಮಿಟಿವ್ಗಳ ಮೇಲೆ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಇಂಟರ್ಫೇಸ್ಗಳನ್ನು ಬಳಸಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ (ಸಾಮಾನ್ಯ ಸಂದರ್ಭದಲ್ಲಿ, ಈ ಪ್ರಿಮಿಟಿವ್ಗಳೊಂದಿಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿದ್ದರೂ ಸಹ, ಕ್ರಿಟಿಕಲ್ ವಿಭಾಗಗಳು ನಿರ್ಬಂಧಿಸುತ್ತವೆ). 1990 ರ ದಶಕದಲ್ಲಿ ಎಲ್ಲಾ ನಿರ್ಬಂಧಿಸದ ಕ್ರಮಾವಳಿಗಳನ್ನು ಸ್ವೀಕಾರಾರ್ಹ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸಾಧಿಸಲು ಆಧಾರವಾಗಿರುವ ಪ್ರಾಚೀನ ಪದಗಳೊಂದಿಗೆ "ಸ್ಥಳೀಯವಾಗಿ" ಬರೆಯಬೇಕಾಗಿತ್ತು. ಆದಾಗ್ಯೂ, ಸಾಫ್ಟ್ವೇರ್ ಟ್ರಾನ್ಸಾಕ್ಷನಲ್ ಮೆಮೊರಿಯ ಉದಯೋನ್ಮುಖ ಕ್ಷೇತ್ರವು ಸಮರ್ಥ ತಡೆರಹಿತ ಕೋಡ್ ಅನ್ನು ಬರೆಯಲು ಪ್ರಮಾಣಿತ ಅಮೂರ್ತತೆಗಳನ್ನು ನೀಡುತ್ತದೆ. ಸ್ಟ್ಯಾಕ್ಗಳು, ಕ್ಯೂಗಳು, ಸೆಟ್ಗಳು ಮತ್ತು ಹ್ಯಾಶ್ ಟೇಬಲ್ಗಳಂತಹ ಮೂಲಭೂತ ದತ್ತಾಂಶ ರಚನೆಗಳನ್ನು ಒದಗಿಸುವಲ್ಲಿ ಹೆಚ್ಚಿನ ಸಂಶೋಧನೆಗಳನ್ನು ಮಾಡಲಾಗಿದೆ. ಇವುಗಳು ಪ್ರೋಗ್ರಾಂಗಳಿಗೆ ಥ್ರೆಡ್ಗಳ ನಡುವೆ ಡೇಟಾವನ್ನು ಸಿಂಕ್ರೊನಸ್ ಆಗಿ ಸುಲಭವಾಗಿ ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳಲು ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತವೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಕೆಲವು ನಿರ್ಬಂಧಿಸದ ದತ್ತಾಂಶ ರಚನೆಗಳು ವಿಶೇಷ ಪರಮಾಣು ಪೂರ್ವಭಾವಿಗಳಿಲ್ಲದೆ ಕಾರ್ಯಗತಗೊಳ್ಳುವಷ್ಟು ದುರ್ಬಲವಾಗಿವೆ. ಈ ವಿನಾಯಿತಿಗಳು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಒಳಗೊಂಡಿವೆಃ ಲಭ್ಯವಿರುವ ಸಹಿ ಮಾಡದ ಪೂರ್ಣಾಂಕ ಪ್ರಕಾರಗಳಲ್ಲಿ ಒಂದರ ಉಕ್ಕಿ ಹರಿಯುವಿಕೆಯನ್ನು ಸಮಾನವಾಗಿ ವಿಭಜಿಸುವ ಗಾತ್ರವನ್ನು ಹೊಂದಿರುವ ಏಕ-ರೀಡರ್ ಏಕ-ಬರಹಗಾರ ರಿಂಗ್ ಬಫರ್ ಎಫ್. ಐ. ಎಫ್. ಓ. ಅನ್ನು, ಒಬ್ಬ ಬರಹಗಾರ ಮತ್ತು ಯಾವುದೇ ಸಂಖ್ಯೆಯ ಓದುಗರೊಂದಿಗೆ ಕೇವಲ ಮೆಮೊರಿ ತಡೆಗೋಡೆ ರೀಡ್-ಕಾಪಿ-ಅಪ್ಡೇಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಬೇಷರತ್ತಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು. (ಓದುಗರು ಕಾಯುವ-ಮುಕ್ತರಾಗಿದ್ದಾರೆ; ಬರಹಗಾರನು ಸಾಮಾನ್ಯವಾಗಿ ಲಾಕ್-ಫ್ರೀ ಆಗಿರುತ್ತಾನೆ, ಅದು ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯುವವರೆಗೆ). ಬಹು ಬರಹಗಾರರು ಮತ್ತು ಯಾವುದೇ ಸಂಖ್ಯೆಯ ಓದುಗರೊಂದಿಗೆ ಓದಿ-ನಕಲು-ನವೀಕರಿಸಿ. (ಓದುಗರು ಕಾಯುವ-ಮುಕ್ತರಾಗಿದ್ದಾರೆ; ಅನೇಕ ಬರಹಗಾರರು ಸಾಮಾನ್ಯವಾಗಿ ಲಾಕ್ನೊಂದಿಗೆ ಸರಣಿ ಮಾಡುತ್ತಾರೆ ಮತ್ತು ಅಡೆತಡೆ-ಮುಕ್ತರಾಗಿರುವುದಿಲ್ಲ). ಹಲವಾರು ಗ್ರಂಥಾಲಯಗಳು ಆಂತರಿಕವಾಗಿ ಲಾಕ್-ಫ್ರೀ ತಂತ್ರಗಳನ್ನು ಬಳಸುತ್ತವೆ, ಆದರೆ ಸರಿಯಾದ ಲಾಕ್-ಫ್ರೀ ಕೋಡ್ ಅನ್ನು ಬರೆಯುವುದು ಕಷ್ಟ. ನಿರ್ಬಂಧಿಸದ ಕ್ರಮಾವಳಿಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಎಚ್ಚರಿಕೆಯಿಂದ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಕ್ರಮದಲ್ಲಿ ಓದುವ, ಓದುವ-ಮಾರ್ಪಡಿಸುವ-ಬರೆಯುವ ಮತ್ತು ಬರೆಯುವ ಸೂಚನೆಗಳ ಸರಣಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ. ಕಂಪೈಲರ್ಗಳನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿಸುವುದು ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಆಕ್ರಮಣಕಾರಿಯಾಗಿ ಮರು-ವ್ಯವಸ್ಥೆಗೊಳಿಸಬಹುದು. ಅವರು ಮಾಡದಿದ್ದರೂ ಸಹ, ಅನೇಕ ಆಧುನಿಕ ಸಿಪಿಯುಗಳು ಆಗಾಗ್ಗೆ ಅಂತಹ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮರು-ವ್ಯವಸ್ಥೆಗೊಳಿಸುತ್ತವೆ (ಅವು "ದುರ್ಬಲ ಸ್ಥಿರತೆಯ ಮಾದರಿ" ಯನ್ನು ಹೊಂದಿವೆ), ಸಿಪಿಯು ಅನ್ನು ಮರುಕ್ರಮಗೊಳಿಸದಂತೆ ಹೇಳಲು ಮೆಮೊರಿ ತಡೆಗೋಡೆಯನ್ನು ಬಳಸದಿದ್ದರೆ. C + + 11 ಪ್ರೋಗ್ರಾಮರ್ಗಳು STD:: ಅಟಾಮಿಕ್ ಅನ್ನು <ಅಟಾಮಿಕ್> ನಲ್ಲಿ ಬಳಸಬಹುದು, ಮತ್ತು C11 ಪ್ರೋಗ್ರಾಮರ್ಗಳು <stdatomic.h> ಅನ್ನು ಬಳಸಬಹುದು, ಇವೆರಡೂ ಅಂತಹ ಸೂಚನೆಗಳನ್ನು ಮರುಹೊಂದಿಸದಂತೆ ಕಂಪೈಲರ್ಗೆ ಹೇಳುವ ಪ್ರಕಾರಗಳು ಮತ್ತು ಕಾರ್ಯಗಳನ್ನು ಪೂರೈಸುತ್ತವೆ ಮತ್ತು ಸೂಕ್ತವಾದ ಮೆಮೊರಿ ಅಡೆತಡೆಗಳನ್ನು ಸೇರಿಸುತ್ತವೆ. ಕಾಯುವ-ಸ್ವಾತಂತ್ರ್ಯ ಕಾಯುವ-ಸ್ವಾತಂತ್ರ್ಯವು ಪ್ರಗತಿಯ ಪ್ರಬಲ ತಡೆರಹಿತ ಖಾತರಿಯಾಗಿದ್ದು, ಖಾತ್ರಿಪಡಿಸಿದ ವ್ಯವಸ್ಥೆಯಾದ್ಯಂತದ ಥ್ರೋಪುಟ್ ಅನ್ನು ಹಸಿವು-ಸ್ವಾತಂತ್ರ್ಯದೊಂದಿಗೆ ಸಂಯೋಜಿಸುತ್ತದೆ. ಪ್ರತಿ ಕಾರ್ಯಾಚರಣೆಯು ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುವ ಮೊದಲು ಅಲ್ಗಾರಿದಮ್ ತೆಗೆದುಕೊಳ್ಳುವ ಹಂತಗಳ ಸಂಖ್ಯೆಯ ಮೇಲೆ ಮಿತಿಯನ್ನು ಹೊಂದಿದ್ದರೆ ಅಲ್ಗಾರಿದಮ್ ಕಾಯುವ-ಮುಕ್ತವಾಗಿರುತ್ತದೆ. ಈ ಗುಣವು ನೈಜ-ಸಮಯದ ವ್ಯವಸ್ಥೆಗಳಿಗೆ ನಿರ್ಣಾಯಕವಾಗಿದೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಚ್ಚವು ತುಂಬಾ ಹೆಚ್ಚಿಲ್ಲದಿರುವವರೆಗೆ ಹೊಂದಲು ಯಾವಾಗಲೂ ಒಳ್ಳೆಯದು. ಎಲ್ಲಾ ಕ್ರಮಾವಳಿಗಳನ್ನು ಕಾಯುವ-ಮುಕ್ತವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು ಎಂದು 1980 ರ ದಶಕದಲ್ಲಿ ತೋರಿಸಲಾಗಿದೆ ಮತ್ತು ಸಾರ್ವತ್ರಿಕ ನಿರ್ಮಾಣಗಳು ಎಂದು ಕರೆಯಲಾಗುವ ಸರಣಿ ಸಂಕೇತದಿಂದ ಅನೇಕ ರೂಪಾಂತರಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗಿದೆ. ಆದಾಗ್ಯೂ, ಪರಿಣಾಮವಾಗಿ ಬರುವ ಕಾರ್ಯಕ್ಷಮತೆಯು ಸಾಮಾನ್ಯವಾಗಿ ನಿಷ್ಕಪಟ ತಡೆಗಟ್ಟುವ ವಿನ್ಯಾಸಗಳಿಗೆ ಸಹ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ. ಅಂದಿನಿಂದ ಹಲವಾರು ಪ್ರಬಂಧಗಳು ಸಾರ್ವತ್ರಿಕ ನಿರ್ಮಾಣಗಳ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಿವೆ, ಆದರೆ ಇನ್ನೂ, ಅವುಗಳ ಕಾರ್ಯಕ್ಷಮತೆಯು ನಿರ್ಬಂಧಿಸುವ ವಿನ್ಯಾಸಗಳಿಗಿಂತ ತುಂಬಾ ಕಡಿಮೆಯಾಗಿದೆ. ಕಾಯುವ-ಮುಕ್ತ ಕ್ರಮಾವಳಿಗಳನ್ನು ರಚಿಸುವ ಕಷ್ಟವನ್ನು ಹಲವಾರು ಪ್ರಬಂಧಗಳು ತನಿಖೆ ಮಾಡಿವೆ. ಉದಾಹರಣೆಗೆ, ವ್ಯಾಪಕವಾಗಿ ಲಭ್ಯವಿರುವ ಪರಮಾಣು ಷರತ್ತುಬದ್ಧ ಆದಿಮಗಳು, ಸಿಎಎಸ್ ಮತ್ತು ಎಲ್ಎಲ್/ಎಸ್ಸಿ, ಎಳೆಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ರೇಖೀಯವಾಗಿ ಬೆಳೆಯುವ ಮೆಮೊರಿ ವೆಚ್ಚಗಳಿಲ್ಲದೆ ಅನೇಕ ಸಾಮಾನ್ಯ ದತ್ತಾಂಶ ರಚನೆಗಳ ಹಸಿವು-ಮುಕ್ತ ಅನುಷ್ಠಾನಗಳನ್ನು ಒದಗಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ಎಂದು ತೋರಿಸಲಾಗಿದೆ. ಆದರೆ ಆಚರಣೆಯಲ್ಲಿ ಈ ಕೆಳಗಿನ ಮಿತಿಗಳು ನಿಜವಾದ ತಡೆಗೋಡೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸುವುದಿಲ್ಲ ಏಕೆಂದರೆ ಹಂಚಿದ ಮೆಮೊರಿಯಲ್ಲಿ ಪ್ರತಿ ಥ್ರೆಡ್ನ ಕ್ಯಾಶ್ ಲೈನ್ ಅಥವಾ ವಿಶೇಷ ಮೀಸಲಾತಿ ಕಣಜವನ್ನು (ಎಆರ್ಎಂನಲ್ಲಿ 2 ಕೆಬಿ ವರೆಗೆ) ಖರ್ಚು ಮಾಡುವುದನ್ನು ಪ್ರಾಯೋಗಿಕ ವ್ಯವಸ್ಥೆಗಳಿಗೆ ತುಂಬಾ ದುಬಾರಿಯೆಂದು ಪರಿಗಣಿಸಲಾಗುವುದಿಲ್ಲ (ಸಾಮಾನ್ಯವಾಗಿ ತಾರ್ಕಿಕವಾಗಿ ಅಗತ್ಯವಿರುವ ಅಂಗಡಿಯ ಪ್ರಮಾಣವು ಒಂದು ಪದವಾಗಿದೆ, ಆದರೆ ಭೌತಿಕವಾಗಿ ಅದೇ ಕ್ಯಾಶ್ ಲೈನ್ನಲ್ಲಿ ಸಿಎಎಸ್ ಕಾರ್ಯಾಚರಣೆಗಳು ಘರ್ಷಿಸುತ್ತವೆ, ಮತ್ತು ಅದೇ ವಿಶೇಷ ಮೀಸಲಾತಿ ಕಣಜದಲ್ಲಿ ಎಲ್ಎಲ್/ಎಸ್ಸಿ ಕಾರ್ಯಾಚರಣೆಗಳು ಘರ್ಷಿಸುತ್ತವೆ, ಆದ್ದರಿಂದ ಭೌತಿಕವಾಗಿ ಅಗತ್ಯವಿರುವ ಅಂಗಡಿಯ ಪ್ರಮಾಣವು ಹೆಚ್ಚು). 2011 ರವರೆಗೆ ಕಾಯುವ-ಮುಕ್ತ ಕ್ರಮಾವಳಿಗಳು ಸಂಶೋಧನೆಯಲ್ಲಿ ಮತ್ತು ಆಚರಣೆಯಲ್ಲಿ ಅಪರೂಪವಾಗಿದ್ದವು. ಆದಾಗ್ಯೂ, 2011 ರಲ್ಲಿ ಕೋಗನ್ ಮತ್ತು ಪೆಟ್ರಾಂಕ್ ಸಿಎಎಸ್ ಪ್ರಾಚೀನದಲ್ಲಿ ಕಾಯುವ-ಮುಕ್ತ ಕ್ಯೂ ಕಟ್ಟಡವನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಿದರು, ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸಾಮಾನ್ಯ ಯಂತ್ರಾಂಶದಲ್ಲಿ ಲಭ್ಯವಿದೆ. ಅವರ ನಿರ್ಮಾಣವು ಮೈಕೆಲ್ ಮತ್ತು ಸ್ಕಾಟ್ನ ಲಾಕ್-ಫ್ರೀ ಕ್ಯೂ ಅನ್ನು ವಿಸ್ತರಿಸಿತು, ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಆಚರಣೆಯಲ್ಲಿ ಬಳಸಲಾಗುವ ಪರಿಣಾಮಕಾರಿ ಕ್ಯೂ ಆಗಿದೆ. ಕೋಗನ್ ಮತ್ತು ಪೆಟ್ರಾಂಕ್ ಅವರ ಫಾಲೋ-ಅಪ್ ಪೇಪರ್ ಕಾಯುವ-ಮುಕ್ತ ಕ್ರಮಾವಳಿಗಳನ್ನು ವೇಗವಾಗಿ ಮಾಡಲು ಒಂದು ವಿಧಾನವನ್ನು ಒದಗಿಸಿತು ಮತ್ತು ಕಾಯುವ-ಮುಕ್ತ ಕ್ಯೂ ಅನ್ನು ಪ್ರಾಯೋಗಿಕವಾಗಿ ಅದರ ಲಾಕ್-ಫ್ರೀ ಪ್ರತಿರೂಪದಷ್ಟು ವೇಗವಾಗಿ ಮಾಡಲು ಈ ವಿಧಾನವನ್ನು ಬಳಸಿತು. ಟಿಮ್ನಾಟ್ ಮತ್ತು ಪೆಟ್ರಾಂಕ್ ಅವರ ನಂತರದ ಲೇಖನವು ಲಾಕ್-ಫ್ರೀಗಳಿಂದ ಕಾಯುವ-ಮುಕ್ತ ದತ್ತಾಂಶ ರಚನೆಗಳನ್ನು ಉತ್ಪಾದಿಸಲು ಸ್ವಯಂಚಾಲಿತ ಕಾರ್ಯವಿಧಾನವನ್ನು ಒದಗಿಸಿತು. ಹೀಗಾಗಿ, ಕಾಯುವ-ಮುಕ್ತ ಅನುಷ್ಠಾನಗಳು ಈಗ ಅನೇಕ ದತ್ತಾಂಶ-ರಚನೆಗಳಿಗೆ ಲಭ್ಯವಿವೆ. ಲಾಕ್-ಫ್ರೀಡಮ್ ಲಾಕ್-ಫ್ರೀಡಮ್ ಪ್ರತ್ಯೇಕ ಎಳೆಗಳನ್ನು ಹಸಿವಿನಿಂದ ಅನುಮತಿಸುತ್ತದೆ ಆದರೆ ಸಿಸ್ಟಮ್-ವೈಡ್ ಥ್ರೋಪುಟ್ ಅನ್ನು ಖಾತರಿಪಡಿಸುತ್ತದೆ. ಪ್ರೋಗ್ರಾಂ ಥ್ರೆಡ್ಗಳನ್ನು ಸಾಕಷ್ಟು ದೀರ್ಘಕಾಲದವರೆಗೆ ಚಲಾಯಿಸಿದಾಗ, ಕನಿಷ್ಠ ಒಂದು ಥ್ರೆಡ್ ಪ್ರಗತಿಯನ್ನು ಸಾಧಿಸಿದರೆ (ಪ್ರಗತಿಯ ಕೆಲವು ಸಂವೇದನಾಶೀಲ ವ್ಯಾಖ್ಯಾನಕ್ಕಾಗಿ) ಅಲ್ಗಾರಿದಮ್ ಲಾಕ್-ಫ್ರೀ ಆಗಿರುತ್ತದೆ. ಎಲ್ಲಾ ಕಾಯುವ-ಮುಕ್ತ ಕ್ರಮಾವಳಿಗಳು ಲಾಕ್-ಫ್ರೀ ಆಗಿವೆ. ನಿರ್ದಿಷ್ಟವಾಗಿ, ಒಂದು ಥ್ರೆಡ್ ಅನ್ನು ಅಮಾನತುಗೊಳಿಸಿದರೆ, ಉಳಿದ ಥ್ರೆಡ್ಗಳು ಇನ್ನೂ ಪ್ರಗತಿಯನ್ನು ಸಾಧಿಸಬಹುದು ಎಂದು ಲಾಕ್-ಫ್ರೀ ಅಲ್ಗಾರಿದಮ್ ಖಾತರಿಪಡಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ, ಎರಡು ಎಳೆಗಳು ಒಂದೇ ಮ್ಯೂಟೆಕ್ಸ್ ಲಾಕ್ ಅಥವಾ ಸ್ಪಿನ್ಲಾಕ್ಗಾಗಿ ಸ್ಪರ್ಧಿಸಬಹುದಾದರೆ, ಅಲ್ಗಾರಿದಮ್ ಲಾಕ್-ಫ್ರೀ ಆಗಿರುವುದಿಲ್ಲ. (ನಾವು ಲಾಕ್ ಅನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವ ಒಂದು ದಾರವನ್ನು ಅಮಾನತುಗೊಳಿಸಿದರೆ, ಎರಡನೇ ದಾರವು ನಿರ್ಬಂಧಿಸುತ್ತದೆ.) ಕೆಲವು ಪ್ರೊಸೆಸರ್ಗಳು ಅನಂತವಾಗಿ ಆಗಾಗ್ಗೆ ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಹಂತಗಳಲ್ಲಿ ಯಶಸ್ವಿಯಾದರೆ ಅಲ್ಗಾರಿದಮ್ ಲಾಕ್-ಫ್ರೀ ಆಗಿರುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಪ್ರೊಸೆಸರ್ಗಳು ಒಂದು ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೆ, ಕೆಲವು ಪ್ರಕ್ರಿಯೆಗಳು ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಹಂತಗಳಲ್ಲಿ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುವಲ್ಲಿ ಯಶಸ್ವಿಯಾಗುತ್ತವೆ ಮತ್ತು ಇತರರು ವಿಫಲವಾಗಬಹುದು ಮತ್ತು ವೈಫಲ್ಯದ ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಬಹುದು. ಕಾಯುವ-ಮುಕ್ತ ಮತ್ತು ಲಾಕ್-ಫ್ರೀ ನಡುವಿನ ವ್ಯತ್ಯಾಸವೆಂದರೆ, ಪ್ರತಿ ಪ್ರಕ್ರಿಯೆಯ ಕಾಯುವ-ಮುಕ್ತ ಕಾರ್ಯಾಚರಣೆಯು ಇತರ ಪ್ರೊಸೆಸರ್ಗಳನ್ನು ಲೆಕ್ಕಿಸದೆ ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಹಂತಗಳಲ್ಲಿ ಯಶಸ್ವಿಯಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ, ಲಾಕ್-ಫ್ರೀ ಅಲ್ಗಾರಿದಮ್ ನಾಲ್ಕು ಹಂತಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆಃ ಒಬ್ಬರ ಸ್ವಂತ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುವುದು, ಅಡ್ಡಿಪಡಿಸುವ ಕಾರ್ಯಾಚರಣೆಗೆ ಸಹಾಯ ಮಾಡುವುದು, ಅಡ್ಡಿಪಡಿಸುವ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸುವುದು ಮತ್ತು ಕಾಯುವುದು. ಏಕಕಾಲೀನ ಸಹಾಯ ಮತ್ತು ಗರ್ಭಪಾತದ ಸಾಧ್ಯತೆಯಿಂದಾಗಿ ಒಬ್ಬರ ಸ್ವಂತ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುವುದು ಸಂಕೀರ್ಣವಾಗಿದೆ, ಆದರೆ ಇದು ಯಾವಾಗಲೂ ಪೂರ್ಣಗೊಳ್ಳುವ ವೇಗವಾದ ಮಾರ್ಗವಾಗಿದೆ. ಯಾವಾಗ ಸಹಾಯ ಮಾಡಬೇಕು, ಸ್ಥಗಿತಗೊಳಿಸಬೇಕು ಅಥವಾ ಅಡೆತಡೆ ಎದುರಾದಾಗ ಕಾಯಬೇಕು ಎಂಬ ನಿರ್ಧಾರವು ವಿವಾದ ನಿರ್ವಾಹಕರ ಜವಾಬ್ದಾರಿಯಾಗಿದೆ. ಇದು ತುಂಬಾ ಸರಳವಾಗಿರಬಹುದು (ಹೆಚ್ಚಿನ ಆದ್ಯತೆಯ ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ ಸಹಾಯ ಮಾಡುವುದು, ಕಡಿಮೆ ಆದ್ಯತೆಯ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಸ್ಥಗಿತಗೊಳಿಸುವುದು), ಅಥವಾ ಉತ್ತಮ ಥ್ರೋಪುಟ್ ಅನ್ನು ಸಾಧಿಸಲು ಹೆಚ್ಚು ಹೊಂದಿಕೊಳ್ಳಬಹುದು, ಅಥವಾ ಆದ್ಯತೆಯ ಕಾರ್ಯಾಚರಣೆಗಳ ವಿಳಂಬವನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು. ಸರಿಯಾದ ಏಕಕಾಲೀನ ಸಹಾಯವು ಸಾಮಾನ್ಯವಾಗಿ ಲಾಕ್-ಫ್ರೀ ಅಲ್ಗಾರಿದಮ್ನ ಅತ್ಯಂತ ಸಂಕೀರ್ಣವಾದ ಭಾಗವಾಗಿದೆ, ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಬಹಳ ದುಬಾರಿಯಾಗಿದೆಃ ಸಹಾಯಕ ಥ್ರೆಡ್ ನಿಧಾನವಾಗುವುದು ಮಾತ್ರವಲ್ಲ, ಹಂಚಿದ ಮೆಮೊರಿಯ ಯಂತ್ರಶಾಸ್ತ್ರಕ್ಕೆ ಧನ್ಯವಾದಗಳು, ಸಹಾಯ ಮಾಡುತ್ತಿರುವ ಥ್ರೆಡ್ ಕೂಡ ನಿಧಾನಗೊಳ್ಳುತ್ತದೆ, ಅದು ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿರುವಾಗ. ಅಡೆತಡೆ-ಸ್ವಾತಂತ್ರ್ಯ ಅಡೆತಡೆ-ಸ್ವಾತಂತ್ರ್ಯವು ಅತ್ಯಂತ ದುರ್ಬಲವಾದ ನೈಸರ್ಗಿಕ ಅಡೆತಡೆಯಿಲ್ಲದ ಪ್ರಗತಿಯ ಖಾತರಿಯಾಗಿದೆ. ಯಾವುದೇ ಹಂತದಲ್ಲಿ, ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಹಂತಗಳಿಗೆ ಪ್ರತ್ಯೇಕವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾದ ಒಂದೇ ಥ್ರೆಡ್ (ಅಂದರೆ, ಎಲ್ಲಾ ಅಡ್ಡಿಪಡಿಸುವ ಥ್ರೆಡ್ಗಳನ್ನು ಅಮಾನತುಗೊಳಿಸಿ) ಅದರ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದರೆ ಅಲ್ಗಾರಿದಮ್ ಅಡೆತಡೆಯಿಲ್ಲ. ಎಲ್ಲಾ ಲಾಕ್-ಫ್ರೀ ಕ್ರಮಾವಳಿಗಳು ಅಡೆತಡೆ-ಮುಕ್ತವಾಗಿವೆ. ಅಡಚಣೆ-ಸ್ವಾತಂತ್ರ್ಯವು ಯಾವುದೇ ಭಾಗಶಃ ಪೂರ್ಣಗೊಂಡ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು ಮತ್ತು ಮಾಡಿದ ಬದಲಾವಣೆಗಳನ್ನು ಹಿಂಪಡೆಯಬಹುದು ಎಂದು ಮಾತ್ರ ಒತ್ತಾಯಿಸುತ್ತದೆ. ಏಕಕಾಲೀನ ಸಹಾಯವನ್ನು ಕೈಬಿಡುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಹೆಚ್ಚು ಸರಳವಾದ ಕ್ರಮಾವಳಿಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು, ಅದನ್ನು ಮೌಲ್ಯೀಕರಿಸಲು ಸುಲಭವಾಗುತ್ತದೆ. ವ್ಯವಸ್ಥೆಯನ್ನು ನಿರಂತರವಾಗಿ ಲೈವ್-ಲಾಕಿಂಗ್ ಮಾಡುವುದನ್ನು ತಡೆಯುವುದು ವಿವಾದ ವ್ಯವಸ್ಥಾಪಕರ ಕಾರ್ಯವಾಗಿದೆ. ಕೆಲವು ಅಡೆತಡೆ-ಮುಕ್ತ ಕ್ರಮಾವಳಿಗಳು ದತ್ತಾಂಶ ರಚನೆಯಲ್ಲಿ ಒಂದು ಜೋಡಿ "ಸ್ಥಿರತೆ ಗುರುತುಗಳನ್ನು" ಬಳಸುತ್ತವೆ. ದತ್ತಾಂಶ ರಚನೆಯನ್ನು ಓದುವ ಪ್ರಕ್ರಿಯೆಗಳು ಮೊದಲು ಒಂದು ಸ್ಥಿರತೆ ಮಾರ್ಕರ್ ಅನ್ನು ಓದುತ್ತವೆ, ನಂತರ ಸಂಬಂಧಿತ ಡೇಟಾವನ್ನು ಆಂತರಿಕ ಬಫರ್ನಲ್ಲಿ ಓದುತ್ತವೆ, ನಂತರ ಇತರ ಮಾರ್ಕರ್ ಅನ್ನು ಓದುತ್ತವೆ ಮತ್ತು ನಂತರ ಮಾರ್ಕರ್ಗಳನ್ನು ಹೋಲಿಸುತ್ತವೆ. ಎರಡು ಗುರುತುಗಳು ಒಂದೇ ಆಗಿದ್ದರೆ ದತ್ತಾಂಶವು ಸ್ಥಿರವಾಗಿರುತ್ತದೆ. ದತ್ತಾಂಶ ರಚನೆಯನ್ನು ನವೀಕರಿಸುವ ಮತ್ತೊಂದು ಪ್ರಕ್ರಿಯೆಯಿಂದ ರೀಡ್ಗೆ ಅಡ್ಡಿಯಾದಾಗ ಮಾರ್ಕರ್ಗಳು ಒಂದೇ ಆಗಿರುವುದಿಲ್ಲ. ಅಂತಹ ಸಂದರ್ಭದಲ್ಲಿ, ಪ್ರಕ್ರಿಯೆಯು ಆಂತರಿಕ ಬಫರ್ನಲ್ಲಿರುವ ಡೇಟಾವನ್ನು ತಿರಸ್ಕರಿಸುತ್ತದೆ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಡೆಡ್ಲಾಕ್ ಜಾವಾ ConcurrentMap#Lock-ಫ್ರೀ ಅಟಾಮಿಟಿ ಲೈವನ್ಸ್ ಲಾಕ್ (ಕಂಪ್ಯೂಟರ್ ಸೈನ್ಸ್) ಪರಸ್ಪರ ಹೊರಗಿಡುವಿಕೆ ಆದ್ಯತೆಯ ವಿಲೋಮ ಸಂಪನ್ಮೂಲ ಹಸಿವಿನ ಉಲ್ಲೇಖಗಳು ಬಾಹ್ಯ ಕೊಂಡಿಗಳು ಲಾಕ್-ಫ್ರೀ ಪ್ರೋಗ್ರಾಮಿಂಗ್ಗೆ ಒಂದು ಪರಿಚಯ ನಿರ್ಬಂಧಿಸದ ಕ್ರಮಾವಳಿಗಳು ಸಿಂಕ್ರೊನೈಸೇಶನ್ ಕಾಂಕರನ್ಸಿ ನಿಯಂತ್ರಣ ಕಾಂಕರನ್ಸಿ ನಿಯಂತ್ರಣ ಕ್ರಮಾವಳಿಗಳು