{"id":96307,"date":"2025-02-06T20:02:37","date_gmt":"2025-02-06T16:32:37","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/"},"modified":"2025-02-06T20:02:37","modified_gmt":"2025-02-06T16:32:37","slug":"syncmutex-in-go-a-study-47he","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/","title":{"rendered":"Sync.Mutex \u062f\u0631 GO: \u06cc\u06a9 \u0645\u0637\u0627\u0644\u0639\u0647"},"content":{"rendered":"<div data-article-id=\"2261659\" id=\"article-body\">\n<p>\u067e\u0633\u062a \u0642\u0628\u0644\u06cc \u0627\u06cc\u0646 \u0628\u0627\u0631 \u060c \u0645\u0646 \u06a9\u0627\u0648\u0634 \u06a9\u0631\u062f\u0645 <code>sync.Mutex<\/code> \u0628\u0631\u0627\u06cc \u062a\u0639\u0645\u06cc\u0642 \u062f\u0631\u06a9 \u0645\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0686\u06af\u0648\u0646\u06af\u06cc \u06a9\u0627\u0631 Mutex \u062f\u0631 GO.<\/p>\n<hr\/>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/#%D9%86%D9%85%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C\" >\u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/#%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87_syncmutex\" >\u062f\u0631\u0628\u0627\u0631\u0647 sync.mutex<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/#%D9%85%D8%AB%D8%A7%D9%84_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_mutex\" >\u0645\u062b\u0627\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 mutex<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/#%DA%AF%D8%B2%DB%8C%D9%86%D9%87_%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D9%87\" >\u06af\u0632\u06cc\u0646\u0647 \u0645\u0633\u0627\u0628\u0642\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/#%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87_Trylock\" >\u062f\u0631\u0628\u0627\u0631\u0647 Trylock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/syncmutex-in-go-a-study-47he\/#%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\" >\u067e\u0627\u06cc\u0627\u0646<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C\"><\/span>\n<p>  \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>sync.Mutex<\/code> \u0627\u0632 \u0646\u0698\u0627\u062f\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f \u0645\u0634\u06a9\u0644\u0627\u062a \u0634\u0648\u062f \u060c \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f \u060c \u0645\u0627\u0646\u0646\u062f \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u06a9\u0647 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06cc\u0627 \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc \u063a\u06cc\u0631 \u0645\u0646\u062a\u0638\u0631\u0647 \u0627\u0639\u0645\u0627\u0644 \u0646\u0645\u06cc \u0634\u0648\u0646\u062f. \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u060c \u0628\u0627 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 <code>Lock<\/code> \u0648\u062a <code>Unlock<\/code> \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0646\u0627\u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u06cc\u0646 \u0686\u0646\u062f\u06cc\u0646 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0634\u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 <code>-race<\/code> \u06af\u0632\u06cc\u0646\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062f\u0627\u062f\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647 \u062f\u0631 \u062d\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0647 \u06af\u0631\u0641\u062a\u0646 \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u062f\u0631 \u0645\u0631\u0627\u062d\u0644 \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87_syncmutex\"><\/span>\n<p>  \u062f\u0631\u0628\u0627\u0631\u0647 sync.mutex<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>https:\/\/pkg.go.dev\/sync#mutex<\/p>\n<p>\u0634\u0631\u0648\u0639 \u0627\u0632 Go 1.18 \u060c <code>TryLock<\/code> \u0627\u0636\u0627\u0641\u0647 \u0634\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06a9\u0646\u0648\u0646 Mutex \u0633\u0647 \u0631\u0648\u0634 \u062f\u0627\u0631\u062f:<\/p>\n<ul>\n<li><code>func (m *Mutex) Lock()<\/code><\/li>\n<li><code>func (m *Mutex) TryLock() bool<\/code><\/li>\n<li><code>func (m *Mutex) Unlock()<\/code><\/li>\n<\/ul>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u0645\u0639\u0645\u0648\u0644 \u060c <code>Lock<\/code> \u0648\u062a <code>Unlock<\/code> \u06a9\u0627\u0641\u06cc \u0647\u0633\u062a\u0646\u062f <code>TryLock<\/code> \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u062f <code>false<\/code> \u0627\u06af\u0631 \u0646\u062a\u0648\u0627\u0646\u062f \u0642\u0641\u0644 \u0631\u0627 \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u062f \u060c \u0627\u0645\u0627 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0627\u0633\u0646\u0627\u062f \u0631\u0633\u0645\u06cc GO \u0628\u06cc\u0627\u0646 \u0634\u062f \u060c \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0622\u0646 \u0646\u0627\u062f\u0631 \u0627\u0633\u062a. \u0627\u06af\u0631 \u0637\u0631\u0627\u062d\u06cc \u0634\u0645\u0627 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a \u060c \u0641\u0642\u0637 <code>Lock<\/code> \u0648\u062a <code>Unlock<\/code> \u0628\u06cc\u0634\u062a\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627 \u0631\u0627 \u0627\u062f\u0627\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%AB%D8%A7%D9%84_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_mutex\"><\/span>\n<p>  \u0645\u062b\u0627\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 mutex<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634 &#8220;\u0646\u0645\u0627\u06cc\u0634\u06af\u0631 \u067e\u06cc\u0634\u0631\u0641\u062a \u0645\u0627\u0646\u0646\u062f Docker&#8221; \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0631\u0627\u06cc \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0627\u0644\u0642\u0648\u0647 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u060c \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0628\u0627\u0631 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0627\u0632 mutex \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u062e\u06cc\u0631.<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0627\u0632 mutex \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u060c \u0645\u062a\u063a\u06cc\u0631 \u0645\u0634\u062a\u0631\u06a9 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u0634\u062e\u0635 \u0634\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u0627\u06af\u0631 MUTEX \u0631\u0627 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f \u060c \u0627\u06cc\u0646 \u0631\u0648\u0646\u062f \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0627 \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0631 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u062f\u0631\u06af\u06cc\u0631\u06cc \u0647\u0627\u06cc \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0628\u0631\u0633\u062f (\u0627\u0641\u0632\u0627\u06cc\u0634 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u0627\u0648\u0644 \u0627\u063a\u0644\u0628 \u0645\u0634\u0627\u0647\u062f\u0647 \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0631\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f).<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">main<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"fmt\"<\/span>\n    <span class=\"s\">\"math\/rand\"<\/span>\n    <span class=\"s\">\"os\"<\/span>\n    <span class=\"s\">\"strconv\"<\/span>\n    <span class=\"s\">\"sync\"<\/span>\n    <span class=\"s\">\"time\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c\">\/\/ set concurrency count<\/span>\n    <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Args<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"m\">3<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Usage: go run main.go [number] [useMutex]\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">maxLoopCount<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">strconv<\/span><span class=\"o\">.<\/span><span class=\"n\">Atoi<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Args<\/span><span class=\"p\">[<\/span><span class=\"m\">1<\/span><span class=\"p\">])<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"o\">||<\/span> <span class=\"n\">maxLoopCount<\/span> <span class=\"o\">&lt;=<\/span> <span class=\"m\">0<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Invalid number. Please provide a positive integer.\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">useMutex<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">strconv<\/span><span class=\"o\">.<\/span><span class=\"n\">ParseBool<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Args<\/span><span class=\"p\">[<\/span><span class=\"m\">2<\/span><span class=\"p\">])<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Invalid string. Please provide a true or false.\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ A mutex to prevent conflicts during progress updates.<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">mu<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">Mutex<\/span>\n\n    <span class=\"c\">\/\/ WaitGroup for waiting until each goroutine has completed<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">wg<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">WaitGroup<\/span>\n\n    <span class=\"n\">loopCount<\/span> <span class=\"o\">:=<\/span> <span class=\"m\">0<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">maxLoopCount<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">wg<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">go<\/span> <span class=\"k\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">defer<\/span> <span class=\"n\">wg<\/span><span class=\"o\">.<\/span><span class=\"n\">Done<\/span><span class=\"p\">()<\/span>\n            <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Sleep<\/span><span class=\"p\">(<\/span><span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Duration<\/span><span class=\"p\">(<\/span><span class=\"n\">rand<\/span><span class=\"o\">.<\/span><span class=\"n\">Intn<\/span><span class=\"p\">(<\/span><span class=\"m\">400<\/span><span class=\"p\">)<\/span><span class=\"o\">+<\/span><span class=\"m\">100<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Millisecond<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">useMutex<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n                <span class=\"n\">loopCount<\/span><span class=\"o\">++<\/span>\n                <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n            <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n                <span class=\"n\">loopCount<\/span><span class=\"o\">++<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}()<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ A channel to signal that all goroutines have finished<\/span>\n    <span class=\"n\">done<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">make<\/span><span class=\"p\">(<\/span><span class=\"k\">chan<\/span> <span class=\"k\">struct<\/span><span class=\"p\">{})<\/span>\n    <span class=\"k\">go<\/span> <span class=\"k\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">wg<\/span><span class=\"o\">.<\/span><span class=\"n\">Wait<\/span><span class=\"p\">()<\/span>\n        <span class=\"n\">done<\/span> <span class=\"o\">&lt;-<\/span> <span class=\"k\">struct<\/span><span class=\"p\">{}{}<\/span>\n    <span class=\"p\">}()<\/span>\n\n    <span class=\"c\">\/\/ Periodically draw the progress status on the screen<\/span>\n    <span class=\"n\">ticker<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">NewTicker<\/span><span class=\"p\">(<\/span><span class=\"m\">10<\/span> <span class=\"o\">*<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Millisecond<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">ticker<\/span><span class=\"o\">.<\/span><span class=\"n\">Stop<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"k\">for<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">select<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">case<\/span> <span class=\"o\">&lt;-<\/span><span class=\"n\">ticker<\/span><span class=\"o\">.<\/span><span class=\"n\">C<\/span><span class=\"o\">:<\/span>\n            <span class=\"c\">\/\/ Clear the screen and redraw<\/span>\n            <span class=\"n\">printProgress<\/span><span class=\"p\">(<\/span><span class=\"n\">maxLoopCount<\/span><span class=\"p\">,<\/span> <span class=\"n\">loopCount<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">mu<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">case<\/span> <span class=\"o\">&lt;-<\/span><span class=\"n\">done<\/span><span class=\"o\">:<\/span>\n            <span class=\"c\">\/\/ Display the final state and exit<\/span>\n            <span class=\"n\">printProgress<\/span><span class=\"p\">(<\/span><span class=\"n\">maxLoopCount<\/span><span class=\"p\">,<\/span> <span class=\"n\">loopCount<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">mu<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">return<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c\">\/\/ printProgress is a function that displays the progress of each indicator<\/span>\n<span class=\"c\">\/\/ Prevent concurrent access to progress data using a mutex<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">printProgress<\/span><span class=\"p\">(<\/span><span class=\"n\">maxLoopCount<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"n\">loopCount<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"n\">mu<\/span> <span class=\"o\">*<\/span><span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">Mutex<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"c\">\/\/ Clear the screen using ANSI escape sequences<\/span>\n    <span class=\"c\">\/\/ \\033[H : Move the cursor to the home position<\/span>\n    <span class=\"c\">\/\/ \\033[2J : Clear the screen<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[H<\/span><span class=\"err\">\\0<\/span><span class=\"s\">33[2J\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"max loop count: %d<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">maxLoopCount<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"current loop count: %d<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">loopCount<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c\">\/\/ Set the total width of the progress bar to 50 characters<\/span>\n    <span class=\"n\">width<\/span> <span class=\"o\">:=<\/span> <span class=\"m\">50<\/span>\n    <span class=\"n\">progress<\/span> <span class=\"o\">:=<\/span> <span class=\"kt\">int<\/span><span class=\"p\">((<\/span><span class=\"kt\">float64<\/span><span class=\"p\">(<\/span><span class=\"n\">loopCount<\/span><span class=\"p\">)<\/span> <span class=\"o\">\/<\/span> <span class=\"kt\">float64<\/span><span class=\"p\">(<\/span><span class=\"n\">maxLoopCount<\/span><span class=\"p\">))<\/span> <span class=\"o\">*<\/span> <span class=\"m\">100<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c\">\/\/ Number of \"*\" characters based on progress percentage<\/span>\n    <span class=\"n\">stars<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">progress<\/span> <span class=\"o\">*<\/span> <span class=\"n\">width<\/span> <span class=\"o\">\/<\/span> <span class=\"m\">100<\/span>\n    <span class=\"n\">spaces<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">width<\/span> <span class=\"o\">-<\/span> <span class=\"n\">stars<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%d.[%s%s] %d%%<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"m\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">repeat<\/span><span class=\"p\">(<\/span><span class=\"s\">\"*\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">stars<\/span><span class=\"p\">),<\/span> <span class=\"n\">repeat<\/span><span class=\"p\">(<\/span><span class=\"s\">\" \"<\/span><span class=\"p\">,<\/span> <span class=\"n\">spaces<\/span><span class=\"p\">),<\/span> <span class=\"n\">progress<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c\">\/\/ repeat: Returns concatenated string by repeating string \"s\" \"count\" times<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">repeat<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"n\">count<\/span> <span class=\"kt\">int<\/span><span class=\"p\">)<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">result<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">\"\"<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">count<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">result<\/span> <span class=\"o\">+=<\/span> <span class=\"n\">s<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">result<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0622\u06cc\u0627 \u0634\u0645\u0627 \u0627\u0632 mutex \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0637\u0648\u0631 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0628\u0631 \u0646\u062a\u06cc\u062c\u0647 \u062a\u0623\u062b\u06cc\u0631 \u0628\u06af\u0630\u0627\u0631\u062f. \u0627\u06af\u0631 \u0686\u0646\u062f\u06cc\u0646 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0628\u062f\u0648\u0646 \u0647\u0645\u0627\u0647\u0646\u06af \u0633\u0627\u0632\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0634\u062a\u0631\u06a9 \u0628\u0646\u0648\u06cc\u0633\u0646\u062f \u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0646\u0698\u0627\u062f\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0628\u0647 \u0627\u062d\u062a\u0645\u0627\u0644 \u0632\u06cc\u0627\u062f \u0631\u062e \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%DA%AF%D8%B2%DB%8C%D9%86%D9%87_%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D9%87\"><\/span>\n<p>  \u06af\u0632\u06cc\u0646\u0647 \u0645\u0633\u0627\u0628\u0642\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0631\u062f\u06cc\u0627\u0628 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0627\u062f\u0647<\/p>\n<blockquote>\n<p>\u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0632 \u0631\u0627\u06cc\u062c \u062a\u0631\u06cc\u0646 \u0648 \u0633\u062e\u062a \u062a\u0631\u06cc\u0646 \u0627\u0646\u0648\u0627\u0639 \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u0647\u0633\u062a\u0646\u062f. \u06cc\u06a9 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0627\u062f\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f \u06a9\u0647 \u062f\u0648 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0628\u0647 \u0637\u0648\u0631 \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0647 \u0647\u0645\u0627\u0646 \u0645\u062a\u063a\u06cc\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646\u062f \u0648 \u062d\u062f\u0627\u0642\u0644 \u06cc\u06a9\u06cc \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0647\u0627 \u06cc\u06a9 \u0646\u0648\u0634\u062a\u0646 \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u06a9\u0645\u06a9 \u0628\u0647 \u062a\u0634\u062e\u06cc\u0635 \u0686\u0646\u06cc\u0646 \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u060c GO \u0634\u0627\u0645\u0644 \u06cc\u06a9 \u0631\u062f\u06cc\u0627\u0628 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0627\u062f\u0647 \u062f\u0627\u062e\u0644\u06cc \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f <code>-race<\/code> \u067e\u0631\u0686\u0645 \u0628\u0647 \u062f\u0633\u062a\u0648\u0631 Go:<\/p>\n<\/blockquote>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u0627\u06af\u0631 \u062f\u0648\u06cc\u062f\u06cc\u062f <code>go run -race main.go 100000 false<\/code> \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u0648\u0646\u0647 \u0628\u0627\u0644\u0627 \u060c \u0627\u06af\u0631 \u0634\u0631\u0627\u06cc\u0637 \u0645\u0633\u0627\u0628\u0642\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062e\u0631\u0648\u062c\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>==================\nWARNING: DATA RACE\nRead at 0x00c000126048 by goroutine 417:\n  main.main.func1()\n      \/path\/to\/main.go:47 +0xe8\n\nPrevious write at 0x00c000126048 by goroutine 23:\n  main.main.func1()\n      \/path\/to\/main.go:47 +0xf8\n\nGoroutine 417 (running) created at:\n  main.main()\n      \/path\/to\/main.go:39 +0x440\n\nGoroutine 23 (finished) created at:\n  main.main()\n      \/path\/to\/main.go:39 +0x440\n==================\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0634\u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 <code>-race<\/code> \u06af\u0632\u06cc\u0646\u0647 \u0628\u0627 <code>go test<\/code> \u06cc\u0627 <code>go build<\/code>\u0628\u0634\u0631 \u0627\u06af\u0631 \u06a9\u062f \u0634\u0645\u0627 \u0627\u0632 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 goroutines \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u0631\u062f\u06cc\u0627\u0628 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0631 \u062d\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u06cc\u0627\u0641\u062a\u0646 \u0632\u0648\u062f\u0631\u0633 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0627\u062f\u0647 \u06a9\u0645\u06a9 \u06a9\u0646\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87_Trylock\"><\/span>\n<p>  \u062f\u0631\u0628\u0627\u0631\u0647 Trylock<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0627\u0634\u0627\u0631\u0647 \u0634\u062f \u060c <code>sync.Mutex<\/code> \u062f\u0631 GO 1.18 \u0648 \u0628\u0639\u062f\u0627\u064b \u0634\u0627\u0645\u0644 <code>TryLock<\/code> \u0631\u0648\u0634 \u0627\u06af\u0631 \u0642\u0641\u0644 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0646\u0628\u0627\u0634\u062f \u060c <code>TryLock<\/code> \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 <code>false<\/code> \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0647 \u062c\u0627\u06cc \u0645\u0633\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u060c \u0628\u0631\u062e\u0644\u0627\u0641 <code>Lock<\/code>\u0628\u0634\u0631 \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u0627\u0633\u0646\u0627\u062f \u0631\u0633\u0645\u06cc \u0630\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0646\u0627\u062f\u0631 \u0627\u0633\u062a. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u062b\u0627\u0644 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0633\u0648\u0621 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 <code>TryLock<\/code> \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0645\u0646\u0637\u0642 \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0645\u0646\u062c\u0631 \u0634\u0648\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u062d\u062a\u06cc\u0627\u0637 \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">main<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"fmt\"<\/span>\n    <span class=\"s\">\"sync\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">mu<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">Mutex<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Start: Lock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"End: Lock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"---\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Start: TryLock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">b<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">TryLock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"TryLock() result is %v<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">b<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"End: TryLock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"---\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Start: Lock - TryLock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">b<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">TryLock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"TryLock() result is %v<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">b<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"End: Lock - TryLock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"---\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Start: TryLock - TryLock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">b<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">TryLock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"TryLock()1 result is %v<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">b<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">b<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">TryLock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"TryLock()2 result is %v<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">b<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"End: TryLock - TryLock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"---\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Start: Lock - Lock - Unlock\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span> <span class=\"c\">\/\/ This causes a deadlock<\/span>\n    <span class=\"n\">mu<\/span><span class=\"o\">.<\/span><span class=\"n\">Unlock<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"End: Lock - Lock - Unlock\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Done.\"<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>$ go run trylock.go\nStart: Lock - Unlock\nEnd: Lock - Unlock\n---\nStart: TryLock - Unlock\nTryLock() result is true\nEnd: TryLock - Unlock\n---\nStart: Lock - TryLock - Unlock\nTryLock() result is false\nEnd: Lock - TryLock - Unlock\n---\nStart: TryLock - TryLock - Unlock\nTryLock()1 result is true\nTryLock()2 result is false\nEnd: TryLock - TryLock - Unlock\n---\nStart: Lock - Lock - Unlock\nfatal error: all goroutines are asleep - deadlock!\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u062f <code>Lock<\/code> \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0628\u062e\u0634 \u0642\u0641\u0644 \u0634\u062f\u0647 \u0628\u0627\u0639\u062b \u0628\u0646 \u0628\u0633\u062a \u0645\u06cc \u0634\u0648\u062f \u060c <code>TryLock<\/code> \u0645\u0633\u062f\u0648\u062f \u0646\u0645\u06cc \u0634\u0648\u062f \u0648 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u062f <code>false<\/code> \u062f\u0631 \u0639\u0648\u0636 \u060c \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648 \u0627\u0632 \u0628\u0646 \u0628\u0633\u062a \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u0634\u0648\u062f. \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u0627 \u062f\u0642\u062a \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u062f\u0631 \u0648\u0627\u0642\u0639 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\"><\/span>\n<p>  \u067e\u0627\u06cc\u0627\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\n<p><strong>\u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062f\u0627\u062f\u0647 \u0627\u0632 mutexes \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/strong>  <\/p>\n<ul>\n<li>\u0627\u06af\u0631 \u0686\u0646\u062f\u06cc\u0646 \u06af\u0648\u0631\u0648\u062a\u06cc\u0646 \u0628\u0647 \u0637\u0648\u0631 \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0634\u062a\u0647 \u0634\u062f\u0647 \u0628\u062f\u0648\u0646 \u0647\u0645\u0627\u0647\u0646\u06af \u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646\u062f \u060c \u0646\u0698\u0627\u062f\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0645\u062d\u062a\u0645\u0644 \u0647\u0633\u062a\u0646\u062f.\n<\/li>\n<li>\u0634\u0631\u0627\u06cc\u0637 \u0645\u0633\u0627\u0628\u0642\u0647 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0645\u0627\u0646\u0646\u062f \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06a9\u0627\u0646\u0627\u0644 \u0647\u0627 \u0631\u062e \u062f\u0647\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0627\u0632 <code>-race<\/code> \u06af\u0632\u06cc\u0646\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062f\u0627\u062f\u0647<\/strong>  <\/p>\n<ul>\n<li>\u062f\u0631 \u062d\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647 \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u060c \u0628\u0647 \u06a9\u0634\u0641 \u0632\u0648\u062f\u0647\u0646\u06af\u0627\u0645 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong><code>TryLock<\/code>  \u0628\u0646\u062f\u0631\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a \u0642\u0641\u0644\/\u0642\u0641\u0644 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a<\/strong>  <\/p>\n<ul>\n<li>\u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0631\u062f \u060c \u0637\u0631\u0627\u062d\u06cc \u0645\u0646\u0627\u0633\u0628 \u0641\u0642\u0637 \u0628\u0627 \u0642\u0641\u0644\/\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u06a9\u0647 \u0627\u0635\u0648\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0631\u0627 \u067e\u0648\u0634\u0634 \u0645\u06cc \u062f\u0647\u062f <code>sync.Mutex<\/code> \u0648 \u062a\u0634\u062e\u06cc\u0635 \u0634\u0631\u0627\u06cc\u0637 \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0645\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u062e\u0648\u062f \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0647\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u067e\u0633\u062a \u0642\u0628\u0644\u06cc \u0627\u06cc\u0646 \u0628\u0627\u0631 \u060c \u0645\u0646 \u06a9\u0627\u0648\u0634 \u06a9\u0631\u062f\u0645 sync.Mutex \u0628\u0631\u0627\u06cc \u062a\u0639\u0645\u06cc\u0642 \u062f\u0631\u06a9 \u0645\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0686\u06af\u0648\u0646\u06af\u06cc \u06a9\u0627\u0631 Mutex \u062f\u0631 GO. \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 sync.Mutex \u0627\u0632 \u0646\u0698\u0627\u062f\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f \u0645\u0634\u06a9\u0644\u0627\u062a \u0634\u0648\u062f \u060c \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f \u060c \u0645\u0627\u0646\u0646\u062f \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u06a9\u0647 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06cc\u0627 \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc \u063a\u06cc\u0631 \u0645\u0646\u062a\u0638\u0631\u0647 \u0627\u0639\u0645\u0627\u0644 \u0646\u0645\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":96309,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-96307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/96307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=96307"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/96307\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/96309"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=96307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=96307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=96307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}