Payamvdn/NorthPersian_fa_wiki huggingface dataset:
هایی گرجی فریدنی ویزگی های بارز یک از گویش زبان گرجی را دارد و هیچ یک از مشخصه های کلیدی زبان گرجی را از دست نداده است: یک سیستم غنی از صامت ها، همهٔ حالت نماهای اسمی و سیستم بسیار پیچیده افعال گرجی را حفظ کرده است و حتی در بعضی حیطه های نمود افعال از گرجی استاندارد پیچیده تر است. آواشناسی. سیستم صامت های گرجی فریدنی دو ویژگی دارد که در بیشتر زبان های قفقاز از جمله زبان ارمنی رایج است: تقابل صامت های دمشی (aspirated) و چاکنایی (glottalized) و تمایزی بین دو مجموعه از اصوات انسدادی-سایشی (affricates). در مورد فهرست صامت ها، qh (صدایی بین ق و خ) و y (صدای ی) در گرجی استاندارد وجود ندارد ولی در بعضی از گویش های زبان گرجی از جمله فریدنی موجودند. همچنین واج f (صدای ف) در وام واژه ها در فریدنی وجود دارد ولی در گرجی گرجستان نیست. نمونه هایی از تقابل صامت ها: p’uri (یکسان) نان، buri بور (وام واژه فارسی) khari (یکسان) باد، k’ari (یکسان) دروازه dzili (یکسان) خواب iq'o (یکسان) او بود γorebi (یکسان) خوک ها، gorebi (gorebi: تپه ها) کوه ها صامت qh (بین ق و خ) صدایی قدیمی است که در گرجی استاندارد با x (خ) ادغام شده است. مثل:
pheqhi و phexi یه معنای پا خوشه های صامت (بدون میان هشت، انتقال یا مصوت) در گرجی فریدنی به قوت خود باقی هستند: thma (یکسان) موی سر، k’bili (یکسان) دندان، čhxili (یکسان) ناخن، chxori (chxvari) گوسفند، dzma (یکسان) برادر، khmari (یکسان) شوهر، Gmachili (q’machvili: پسربچه) بچه، qhbo (xbo) گوساله، thxa (یکسان) بز، mze (یکسان) آفتاب خورشید، c’q’ali (یکسان) آب، dγe (یکسان) روز، č’le (mč’le) لاغر، thbili (یکسان) گرم، vzivar (یکسان) نشسته ام، hč’am (č’am) تو می خوری خوشه های بلندتری هم وجود دارند: t’k’bili (یکسان) شیرین، c’q'ran (c’q’nari) آرام، آهسته، mq’vanda (mq’avda) من (مفعول غیرمستقیم بی جان) داشتم، mt’k’ivis (mt’k’iva) اذیتم می کند (درد می کند), gt’k’ivis (gt’k’iva) اذیتت می کند (درد می کند), vk’debi (vk’vdebi) من می میرم، vsq'idoph (vq’idulob) من می فروشم، rc’q’av (یکسان) تو آبیاری می کنی، sxnis (xsnis) او باز می کند، vk’lav (یکسان) من می کُشم، mc’q’urian (mc’q’uria) من تشنه هستم، chxra (یکسان) نُه، vjdebi (یکسان) من می نشینم vrc’q’av (یکسان) من آبیاری می کنم، vsxni (vxsni) من باز می کنم، hsxni (xsni) تو باز
می کنی افعال. سیستم افعال، علاوه بر اینکه انواع زیادی از صرف داشته که هر نوع الگوهای استثنا نیز دارد، اشکال زیادی نیز برای هر فعل دارد. گرجی فریدنی یازده شکل مختلف زمان-نمود-وجه دارد (حال، آینده، التزامی، گذشته، گذشته التزامی و …). بعلاوه اینکه هریک از این یازده شکل می تواند مجهول، سببی، سببی مجهول، سببی مضاعف، سببی مضاعف مجهول و … بشود. بعنوان مثال:
جزیره داش زیره یا زیره کوچک یا وولف یک جزیره خالی از سکنه و باشنده در جمهوری آذربایجان است که در دریای کاسپین و مجمع الجزایر باکو جای دارد. واژه "زیره" برگرفته از واژه "جزیره" است. جغرافیا. مساحت این جزیره تقریباً ۱ کیلومتر مربع (۲۴۷۱۱ هکتار) است. آب های پیرامون این جزیره بسیار کم عمق است و به دلیل آلودگی روغنی و نفتی و همچنین بسیاری از عوامل دیگر، پوشش گیاهی بسیار کمی در این جزیره وجود دارد. بوم شناسی. چندین گونه جانوری و گیاهی از جمله فک کاسپی، ماهیان خاویاری، خوتکا، ماهی های کشیم و شاخچه ها در این جزیره و پیرامون آن یافت می شوند.
جزیره قره سو یک جزیره شنی خالی از سکنه و باشنده در نزدیکی باکو، پایتخت جمهوری آذربایجان است این جزیره بخشی از مجمع الجزایر باکو است. جغرافیا. قره سو یک جزیره با منشأ تکتونیکی است. درازای آن و پهنای آن است. پیش تر میدان های گازی و نفتی بزرگی در این جزیره وجود داشت. این جزیره حدود از نزدیک ترین ساحل فاصله دارد. آب های پیرامون آن بسیار کم عمق است. بوم شناسی. به دلیل آلودگی روغنی و نفتی و همچنین عوامل دیگر، پوشش گیاهی بسیار کمی در این جزیره وجود دارد. چندین گونه جانوری و گیاهی از جمله فک کاسپی، ماهیان خاویاری، اردک های سبز دودی، ماهی های کشیم در این جزیره و پیرامون آن یافت می شود.
سلینا کایل ، معروف به زن گربه ای ، شخصیتی خیالی است که در فیلم ابرقهرمانانه بازگشت بتمن تیم برتون در سال ۱۹۹۲ "ظاهر می شود" . نقش ضد قهرمان زن گربه ای را میشل فایفر بازی کرده است.زن گربه ای اغلب یکی از بهترین بازی های فایفر در نظر گرفته می شود ، حتی اگر او آن را یکی از ناراحت کننده ترین کارهای خود قلمداد می کرد ، به دلیل ناراحتی و مهار مهمی که هنگام پوشیدن لباس متحمل شده است. هنگامی که "بازگشت بتمن" در ژوئن ۱۹۹۲ اکران شد ، این اجرا باعث تحسین منتقدان و تحسین های فراوان شد و به طور مداوم به عنوان بزرگترین تصویر زن گربه ای در تمام دوران توسط منتقدان و طرفداران شناخته می شود. شخصیت. پس از آنکه سلینا به طور تصادفی از نقشه شرک برای ساخت نیروگاهی که باعث سرقت برق گاتهام می شود ، پی برد ، شرک با هل دادن وی از پنجره دفتر خود سعی در قتل وی دارد. او پس از سقوط می میرد و توسط گروهی از گربه های کوچه که دور او جمع می شوند و انگشتانش را می خزند ، به طرز مرموزی زنده می شود. وقتی به خانه برمی گردد ، دچار یک روان پریشی می شود و زن گربه ای می شود. او به عنوان بخشی از برنامه بزرگتر خود برای نابودی شرک ، با پنگوئن ( دنی دیویتو )
که توجه بتمن ( مایکل کیتون ) را به خود جلب می کند متحد می شود. در همین حال ، او رابطه ای را با بروس وین آغاز می کند ، در ابتدا نمی داند که او بتمن است. در اوج فیلم ، زن گربه ای سعی می کند شرک را بکشد. گرچه شرک چند بار به او شلیک کرد ، اما نتوانست او را بکشد. وی سپس شرک را در حالی که بر روی کابل برق در معرض قرار گرفته بود ، با بوسیدن او با مزه در دهان خود می کشد. انفجاری رخ می دهد ، اما پس از آن ، بتمن فقط جسد سوخته شرک را پیدا می کند. همانطور که بعدا فرستنده بتمن در آسمان شب می درخشد ، زن گربه ای دیده می شود که از دور تماشا می کند. در فیلم "زن گربه ای" ، عکس کایل در میان عکسهای "بانوان گربه" سابق نشان داده شده است که توسط پپرسیون فیلیپس ( هلی بری ) هنگام بازدید از پژوهشگر عجیب اوفلیا پاورز ( فرانسیس کانروی ) مشاهده شده است. طبق مقاله روزنامه جایگزین که توسط الکساندر ناکس ( رابرت وول) خوانده شد ، کایل بعد از پیوستن دوباره به بروس وین علناً با او درگیر شد.
انتخابات پارلمانی جمهوری کیپ ورد ()یا دماغه سبز برای ۱۸ آوریل ۲۰۲۱ تدارک دیده شده. در انتخابات ۲۰۱۶ حزب جنبش برای دموکراسی کیپ ورد به رهبری یولیسز کوریا ای سیلوا به پیروزی دست یافت. نظام انتخاباتی. ۷۲عضو مجمع عمومی از ۱۶ حوزه انتخابیه برای کسب ۲ تا ۱۵کرسی انتخاب می شوند. این انتخابات با استفاده از نمایندگی نمایندگی تناسبی، لیست بسته (تک رأی انتقال پذیر) و روش هوندت برگزار می شود.
قره سوران به ترتیب سپاه ژاندارمری و اداره امنیت استانی دودمان صفویان و قاجاریان در دوران ایران صفوی و دوران ایران قاجاری بودند. بیشتر اعضای قره سوران در حفاظت و ایمنی جاده های اصلی شرکت داشتند.
جزیره باتکاچنی () یک جزیره در دریای کاسپین است. این جزیره درست در دهانه های رود ولگا و در منطقه ای جای دارد که بسیاری از جزایر دلتایی وجود دارند. این جزیره شکل بسیار پیچ و تاب خورده ای دارد و دارای بسیاری از سرها و ورودی ها است. این جزیره توسط یک کانال ۱ کیلومتری از ساحل جدا می شود. درازای آن تقریباً ۳۰ کیلومتر و بیشترین پهنای آن تقریباً ۱۰ کیلومتر است. این جزیره و جزایر مجاور آن از نظر اداری متعلق به استان آستراخان روسیه هستند.
پلوتونوسن , Pu(C۸H۸)۲ یک ترکیب آلی متشکل از یک اتم پلوتونیوم است که به صورت ساندویچی بین دو حلقه آنیون سیکلواکتاتتراانید (COT2-) قرار دارد. این ماده، به صورت جامد قرمز تیره و بسیار حساس به هوا است که به میزان کمی در تولوئن و کلروکربن ها محلول است. پلوتونوسن عضو دسته اکتینوسن ها است که در آن آکتینیدها در حالت اکسایش ۴+ خود قرار دارند. اکتینوسن ها خود نوعی ترکیب متالوسن محسوب می شوند. پلوتونوسن تا دهه ۱۹۸۰ به دلیل خطر قابل توجه تشعشع در مقایسه با اکتینوسن های دیگر مانند اورانوسن، کمتر مورد مطالعه قرار گرفته است. در عوض، این ترکیب بیشتر موضوع مطالعات نظری مربوط به پیوند در مولکول بوده است.
در فرانسه ۱۱ روز به طور رسمی تعطیل است ،موزل و آلزاس علاوه بر این ۱۱ روز ۲ روز دیگر را به عنوان تعطیلی به رسمیت می شناسند. برخلاف اکثر کشورها، این تعطیلات هنگام تعطیلات آخر هفته به روزهای تغییر نمی کند. تعطیلات رسمی در فرانسه
اویگن فینک (١١ دسامبر ١٩٠۵- ٢۵ ژوئیه ١٩٧۵) فیلسوف آلمانی بود. فینک که زمانی دستیار ادموند هوسرل فیلسوف جریان سازِ آلمانی بود، در زمینهٔ پدیدارشناسی استعلایی و بعدها در همکاری با مارتین هایدگر در پدیدارشناسی اگزیستانسیالیستی فعالیت علمی می کرد.
فردیناند شوال (۱۹ آوریل ۱۸۳۶ – ۱۹ اوت ۱۹۲۴) پستچی فرانسوی بود که سی و سه سال از عمر خود را صرف ساختن کاخ ایده آل ("Le Palais idéal") در شهر کوچک هاتریو در فرانسه کرد. کاخ به عنوان نمونه ای خارق العاده از معماری هنری ساده لوحانه قلمداد می شود. ارتفاع سه سنگ غول پیکر 10.5متر زندگی نامه. جوزف فردیناند شوال، معروف به Facteur Cheval (پستچی / پستچی شوال) در یک خانواده کشاورز فقیر متولد شد. وی در سن ۱۳ سالگی مدرسه را رها کرد تا شاگرد نانوایی شود، اما سرانجام پستچی شد. در سال ۱۸۵۸، شوال با همسر اول خود، روزالین ریوول ازدواج کرد. آنها با هم صاحب دو پسر به نام های ویکتورین جوزف فرناند (۱۸۶۴) و فردیناند سیریل (۱۸۶۷) شدند. ویکتورین تنها یک سال پس از تولد در سال ۱۸۶۵ درگذشت. همسر اول او روزالین در سال ۱۸۷۳ درگذشت. پنج سال بعد شوال با کلر-فیلومن ریچود آشنا شد و با او ازدواج کرد. به دلیل ازدواج او با کلر، این زوج جدید مالک زمینی شدند که به عنوان هدیه عروسی به آنها واگذار شد؛ یعنی همان زمینی که کاخ ایده آل امروز در آن قرار دارد. بعداً در همان سال، کلر دختر آنها آلیس-ماری-فیلومن را به دنیا آورد. آلیس در سال ۱۸۹۴ در سن ۱۵ سالگ
ی درگذشت. مرگ آلیس بیشترین ضربه را به شوال وارد کرد و او آخرین فرزندی بود که می توانست داشته باشد. هجده سال بعد، پسرش سیریل و همسر دوم او، کلر، به ترتیب در دو سال پیاپی در سالهای ۱۹۱۲ و ۱۹۱۴ درگذشتند. کاخ ایده آل. شوال ساختمان را در آوریل ۱۸۷۹ هنگامی که ۴۳ ساله بود شروع کرد. به گفته او: من خیلی سریع راه می رفتم که پایم به چیزی گرفت که باعث لغزش من در فاصله چند متری شد، من می خواستم علت آن را بدانم. در خواب من یک کاخ، قلعه یا غار ساخته بودم، نمی توانم خیلی واضح آن را به یا آورم. از ترس اینکه مورد تمسخر قرار نگیرم به کسی در این باره نگفتم بعد پانزده سال بعد، وقتی خوابم را تقریباً فراموش کرده بودم، وقتی اصلاً به آن فکر نمی کردم، پاهایم آن را به من یا آوری می کردند پایم روی سنگی لرزید که تقریباً باعث سقوط من شد. می خواستم بدانم که آن چیست؟ سنگ چنان شکل عجیبی داشت که دلم می خواست همیشه جلوی چشمم باشد برای همین آن را در جیبم گذاشتم. روز بعد، به همان مکان برگشتم. سنگهای بیشتری پیدا کردم، حتی زیباتر، آنها را درجا جمع کردم. این سنگ ماسه ای است که توسط آب شکل گرفته و با قدرت زمان سخت شده است. مثل سنگریزه سخت می شود. ای
ن یک مجسمه به قدری عجیب است که تقلید از آن برای انسان غیرممکن است، نمایانگر هر نوع حیوان، هر نوع کاریکاتور است. با خودم گفتم: از آنجا که طبیعت مایل است مجسمه سازی کند، پس من هم سنگ تراشی و معماری را انجام می دهم. برای سی و سه سال آینده، شوال در طول پست روزانه خود سنگهایی را برداشت و آنها را به خانه برد تا "کاخ ایده آل را بسازد". او بیست سال اول را صرف ساخت دیوارهای خارجی کرد. در ابتدا سنگ ها را در جیب های خود حمل کرد و سپس در یک سبد خرید می ریخت. و در نهایت، او از یک چرخ دستی استفاده می کرد. او شبهای زیادی را زیر نور چراغ نفتی به ساخت کاخ ایده آل مشغول بود. کاخی برای آلیس می ساخت و همیشه داستان هایی از مشرق زمین برای او در حین ساخت کاخ تعریف می کرد. مواد کاخ عمدتاً از سنگها (رودخانه شسته شده)، سنگریزه ها، توفا متخلخل و فسیل هایی با اشکال و اندازه های مختلف تشکیل شده است. هنگامی که یک بازدید کننده برای اولین بار از کاخ بالا می آید، اولین چهره ای که می بیند نمای جنوبی است. طول تقریبی ۲۶ متر و ارتفاع آن تا ۱۰ متر است. این دکوراسیون به جنبه های Brighton Pavilion و Gaudí 's Sagrada Família شباهت دارد. شوال سفر نکر
د و حتی به خود لقب دهقان را داده بود، بنابراین حتی اگر این خصوصیات به آن قطعات هنری شباهت دارد، او هرگز آنها را ندیده بود. سه سنگ غول پیکر، هر کدام با چهره هایی شبیه عروسک، با ارتفاع حدود ۱۰٫۵ سانتی متر، نه تنها به عنوان تزئین بلکه به عنوان یک سیستم پشتیبانی از برج باربری عمل می کنند، با یک راه پله مارپیچ ظریف که با قوهای ساخته شده از سیمان به آن منتهی می شود. سنگهای بلند ورسینگتوریکس، ارشمیدس و سزار نامگذاری شده اند. شوال هر یک از این نام ها را جداگانه با دست حک کرده است. اگرچه شوال باعث شد که شهر هاتریو را در نقشه نیز قرار دهند اما مسولان شهری با درخواست وی مبنی بر دفن او کنار همسرش در کاخ مخالفت کردند. او در سال ۱۹۱۴ دوباره شروع به کار کرد و دومین اثر خود که از کاخ قبلی کوچک تر هم بود، در یک گورستان محلی ساخت. او ۸ سال را صرف ساخت سازه ای کرد که آن را «آرامگاه سکوت و آرامش ابدی» نامید. دو سال بعد از اتمام این اثر و درست چند روز بعد از این که او نوشتن زندگی نامه اش را به پایان رساند، شوال فوت کرد و در سازهٔ جدید خود به خاک سپرده شد.
ژوزف گراسی (۲۲ آوریل ۱۷۵۷–۷ ژانویه ۱۸۳۸)، نقاش رخساره اتریشی بود. نام میانی او معمولاً به عنوان " ماریا " داده می شود، اگرچه شواهدی وجود دارد که در واقع " ماتیاس " بوده است. او را " جوزپه گراسی " نیز می گویند. زندگی. ژوزف گراسی در وین به دنیا آمد، برادر کوچکش آنتون گراسی مجسمه ساز و پدر آنها، اوتیلیو، یک طلافروش اهل اودینه بود. ژوزف در آکادمی هنرهای زیبا وین تحصیل کرد. او احساس کرد که در آنجا با او ناعادلانه رفتار می شود، بنابراین، هنگامی که در مسابقه بورسیه سفر از هاینریش فردریش فوگر شکست خورد، از توصیه برخی از دوستان ملی گرای لهستانی استفاده کرد و به ورشو نقل مکان کرد. در آنجا، او معلم ترزا جابونوفسکا (از فرزندان استانیسلاو جان جابونوفسکی) شد و خود را به عنوان یک نقاش رخساره موفق معرفی کرد. هنگامی که قیام کوشسیوسکو در سال ۱۹۷۴ آغاز شد، وی توانست با وساطت کوشچیوشکو، که رخساره خود را نقاشی کرده بود، منطقه جنگ را ترک کند. گراسی بیشتر به خاطر رخساره های حساس خود از زنان شهرت دارد. در سالهای بعد، سبک او کمتر مورد لطف واقع شد و به نوعی کلاسیک گرایی آکادمیک تبدیل شد. وی در درسدن در سن ۸۰ سالگی درگذشت.
انتخابات سراسری اکوادور () در هفتم فوریه ۲۰۲۱ توسط ستاد شورای انتخابات برای انجام مرحله اول برگزار گردید. علاوه بر این یک رای گیری در خصوص استخراج معادن کوانکا نیز انجام شد. لنین مورنو رئیس جمهور وقت که از زمان پیروزی خود در انتخابات ریاست جمهوری ۲۰۱۷ در قدرت بود درپی حضور مجدد در این انتخابات نبود. با وجودی که احتمال تأخیر در برگزاری انتخابات وجود داشت، اما در ۱۵ دسامبر ۲۰۲۰ تصریح شد که تغییری در تقویم انتخاباتی ایجاد نخواهدشد و انتخابات در فوریه ۲۰۲۱ برگزار گردید. نتایج مقدماتی مرحله اول انتخابات حاکی از آن بود که آندره آروز از برتری قابل توجهی برخوردار است، اما اختلاف آنچنان فاحش نبود تا بتواند اکثریت را به دست آورد و در نتیجه انتخابات به مرحله دوم راه یافت تا آروز مقابل رقیبش گیرمو لاسو قرار گیرد. یاکو پرز نیز در مکان سوم بعد از لاسو قرار گرفت. نتایج نهایی به دلیل درخواست مجدد آرا در برخی استان ها به تأخیر افتاد. در مرحله دوم انتخابات که در ۱۱ آوریل ۲۰۲۱ برگزار شد، گیرمو لاسو رقیب خود آندره آروز را شکست داد و در ۲۴ مه سوگند ریاست جمهوری خورد.
در برنامه نویسی همروند (یا همان برنامه نویسی موازی)، مانیتور یک ساختار همگام سازی است که به ریسمان ها این امکان را می دهد که هم، انحصار متقابل داشته باشند و هم، بتوانند برای یک وضعیت خاص منتظر بمانند (مسدود شوند) تا وضعیت غلط شود. مانیتورها همچنین دارای یک مکانیسم هستند که به ریسمان های دیگر، از طریق سیگنال می فهمانند که شرایط آن ها برآورده شده است. یک مانیتور، حاوی یک شئ میوتکس (قفل) و متغیرهای وضعیت است. یک متغیر وضعیت اساساً، ظرفی از ریسمان ها است که منتظر یک وضعیت خاص هستند. مانیتورها برای ریسمان ها مکانیسمی را فراهم می کنند، تا به طور موقت، و با هدف منتظر ماندن برای برآورده شدن شرایط خاص، دسترسی انحصاری را رها کنند، و سپس دسترسی انحصاری را مجدداً به دست آورند و کار خود را از سر گیرند.یک تعریف دیگر برای مانیتور عبارت است از یک کلاس، شئ، یا ماژول امنیت-ریسمانی، که دور یک ریسمان می پیچد، تا به طور ایمن، به بیش از یک ریسمان اجازه دسترسی به یک متد یا متغیر را بدهد. مشخصهٔ تعریف کننده یک مانیتور این است که متدهای آن با انحصار متقابل اجرا می شوند: در هر لحظه، حداکثر یک ریسمان می تواند هر کدام از متدهای آن را اج
را کند. همچنین، با فراهم کردن یک یا بیش از یک متغیر شرطی، می تواند این قابلیت را به ریسمان ها بدهد تا، منتظر یک شرایط خاص بمانند (و بنابراین، از تعریف بالای یک مانیتور استفاده می شود). در ادامهٔ این مقاله، این مفهوم از «مانیتور» را، یک «ماژول/ کلاس/ شئ امنیت-ریسمانی» می نامیم. مانیتورها، توسط آقایان Per Brinch Hansen و C. A. R. Hoare ابداع شدند، و اولین بار در زبان پاسکال همروند آقای Brinch Hansen پیاده سازی شدند. انحصار متقابل. به عنوان یک مثال ساده، یک شئ امنیت ریسمانی را برای انجام تراکنش ها در یک حساب بانکی در نظر بگیرید: monitor class "Account" { private "int" balance := 0 invariant balance &gt;= 0 public method "boolean" withdraw("int" amount) precondition amount &gt;= 0 if balance &lt; amount { return false } else { balance := balance - amount return true public method deposit("int" amount) precondition amount &gt;= 0 balance := balance + amount هنگامی که یک ریسمان یک متد از یک شئ امنیت- رسمانی را اجرا می کند، اصطلاحاً گفته می شود که، آن شئ را، با نگه داشتن میوتکس (قفل) آن، اشغال کرده است. اشیاء امنیت-
ریسمانی، به این منظور پیاده سازی می شوند که مطمئن شویم که در هر زمان حداکثر، یک ریسمان می تواند شئ مورد نظر را اشغال کند. قفل، که در ابتدا باز است، در زمان شروع هر متد عمومی بسته می شود و در زمان هر بازگشت از متد عمومی باز می شود. یک ریسمان، پس از فراخوانی یکی از متدها، و قبل از شروع اجرای متد خودش، باید منتظر بماند تا زمانیکه هیچ ریسمان دیگری، هیچ یک از متدهای شئ امنیت-ریسمانی را اجرا نکند. توجه داشته باشید که بدون این انحصار متقابل در مثال بالا، دو ریسمان می توانند موجب شوند تا، بدون هیچ دلیل خاصی، پولی از بین برود یا به دست آید. برای مثال، دو ریسمان، هرکدام با برداشت مقدار ۱۰۰۰ واحد از حساب می توانند هر دو، مقدار true را برگردانند، و در عین حال، موجب شوند تا مقدار باقی ماندهٔ حساب فقط به اندازه هزار واحد کاهش پیدا کند؛ به شکل زیر: ابتدا هر دو ریسمان مقدار کنونی حساب را دریافت می کنند و متوجه می شوند که بیشتر از هزار واحد است و هزار واحد را از آن برمی دارند، سپس هر دو ریسمان مقدار مانده حساب را ذخیره می کنند و بازمی گردند.کلاس «مانیتور» که در مثال بالا به شکل شکلات نحوی(syntactic sugar) نوشته شده است، در وا
قع کد زیر را با پیچیدن هر کدام از اجراهای تابع در میوتکس ها، پیاده سازی می کند. class "Account" { private "lock" myLock private "int" balance := 0 invariant balance &gt;= 0 public method "boolean" withdraw("int" amount) precondition amount &gt;= 0 myLock.acquire() try { if balance &lt; amount { return false } else { balance := balance - amount return true } finally { myLock.release() public method deposit("int" amount) precondition amount &gt;= 0 myLock.acquire() try { balance := balance + amount } finally { myLock.release() متغیر های شرطی. بیان مسئله. در بسیاری از موارد، انحصار متقابل کفایت نمی کند. ممکن است لازم باشد تا ریسمان هایی که یک عملیات را اجرا می کنند، منتظر بمانند، تا برخی شرایط P صحیح(true) شود. یک حلقه انتظار فعال &lt;br&gt; while not( P ) do skip کار نخواهد کرد، زیرا انحصار متقابل مانع از این می شود که هر گونه ریسمان دیگری وارد مانیتور شود تا شرایط را صحیح کند. راه حل های دیگری وجود دارند، نظیر: داشتن یک حلقه که قفل مانیتور را باز می کند، برای مدت زمان خاصی منتظر می ماند، مانیتور را قفل میکند و
شرایط P را چک می کند. به طور تئوری، این روش کار می کند و دچار بن بست نمی شود، اما مشکلاتی پیش می آید. مشخص کردن مقدار زمان لازم برای انتظار، دشوار است؛ اگر خیلی کم باشد، پروسه ی مذکور بیشتر وقت CPU را می گیرد و اگر خیلی زیاد باشد، آشکارا بدون پاسخ خواهد بود. آنچه لازم است، شیوه ای است که در آن، وقتی که شرایط P صحیح شد (یا بتواند صحیح شود)، از طریق یک سیگنال، ریسمان را مطلع کند. مطالعه موردی: مشکل تولید کننده مصرف کننده محدود کلاسیک. یک مشکل همروندی کلاسیک، مسئله ی تولید کننده-مصرف کننده ی محدود شده است، که در آن یک صف یا بافر حلقوی از کارها وجود دارد که دارای یک گنجایش حداکثر است و در آن یک یا بیش از یک ریسمان نقش تولید کننده را ایفا می کند، یعنی کارهایی را به صف اضافه می کند و یک یا بیش از یک ریسمان نقش مصرف کننده را بازی می کند، یعنی کارهایی را از صف خارج می کند. فرض بر این است که خود صف امنیت-ریسمان ای ندارد و می تواند خالی، پر، یا چیزی بین خالی و پر باشد. زمانیکه صف از کارها پر می شود، آنگاه نیاز است تا ریسمان های تولید کننده مسدود شوند تا زمانیکه با خالی کردن کارها از صف توسط مصرف کننده ها، فضا خالی شود
. از سوی دیگر، زمانیکه صف خالی است، لازم است تا ریسمان های مصرف کننده مسدود شوند، تا زمانیکه ریسمان های تولیدکننده آیتمی را به صف اضافه کنند تا در اختیار مصرف کننده قرار بگیرد.&lt;br&gt; از آنجاییکه صف، یک شیء همروند مشترک بین ریسمان ها است، دسترسی به آن باید به صورت اتمیک باشد، زیرا در زمان دسترسی به آن (که هرگز نباید بین ریسمان ها نمایان شود)، می تواند در وضعیت ناسازگار قرار بگیرد. بنابراین، هر کدی که به صف دسترسی پیدا می کند، یک ناحیه بحرانی را تشکیل می دهد که باید به طریق انحصار متقابل همگام سازی شود. اگر تعویض های زمینه ای(context switch) دلخواه بین ریسمان هایی که در یک پردازنده قرار دارند، یا بین ریسمان های موجود در چندین پردازنده که به طور همزمان اجرا می شوند، بتوانند در لابلای کد و دستورالعمل های پردازنده در نواحی بحرانی کد، که به صف دسترسی پیدا می کنند، قرار گیرند، آنگاه خطر نمایان شدن وضعیت ناسازگار یا ایجاد شرایط رقابتی وجود دارد. نادرست، بدون همگام سازی. یک روش ناشیانه این است که کد مورد نظر را با استفاده از انتظار فعال و بدون همگام سازی طراحی کنیم، که باعث می شود کد در معرض شرایط رقابتی قرار گیرد
: global RingBuffer queue; // A thread-unsafe ring-buffer of tasks. // Method representing each producer thread's behavior: public method producer() { while (true) { task myTask = ...; // Producer makes some new task to be added. while (queue.isFull()) {} // Busy-wait until the queue is non-full. queue.enqueue(myTask); // Add the task to the queue. // Method representing each consumer thread's behavior: public method consumer() { while (true) { while (queue.isEmpty()) {} // Busy-wait until the queue is non-empty. myTask = queue.dequeue(); // Take a task off of the queue. doStuff(myTask); // Go off and do something with the task. این کد دارای یک مشکل جدی است و آن این است که دسترسی ها به صف ممکن است دچار وقفه شوند و سایر دسترسی های ریسمان ها به صف، در ما بین آن قرار گیرد. متدهای queue.enqueue و queue.dequeue احتمالاً دارای دستورالعمل هایی برای به روز رسانی متغیرهای عضو صف، همچون اندازه ی آن، وضعیت های شروع و پایان، نسبت دهی و اختصاص عناصر صف و ... است. علاوه بر این، متدهای ()queue.isEmpty و ()queue.isFull نیز ا
ین وضعیت مشترک را می خوانند. اگر این اجازه بدهیم که ریسمان های تولیدکننده/مصرف کننده در حین فراخوانی ها به enqueue/dequeue در لابلای هم قرار گیرند، آنگاه وضعیت ناسازگار درصف می توانند نمایان شود، که منجر به شرایط رقابتی می شود. علاوه بر این، اگر یک مصرف کننده در زمان بین خروج مصرف کننده دیگر از انتظار فعال و فراخوان dequeue، صف را تهی کند، آنگاه مصرف کننده ی دوم تلاش خواهد کرد تا یک صف خالی را، خالی کند، که منجر به یک خطا می شود. به همین شکل، اگر یک تولید کننده در زمان بین خروج تولیدکننده دیگر از انتظار فعال و فراخوانی enqueue، صف را پر کند، آنگاه مصرف کننده دوم تلاش خواهد کرد تا به صفی که پر است اضافه کند، که منجر به یک خطا می شود. انتظار چرخشی. یک روش ناشیانه برای دستیابی به همگام سازی، که در بالا اشاره ی گذرا به آن شد، استفاده از انتظار چرخشی است که در آن از یک میوتکس برای محافظت از نواحی بحرانی کد استفاده می شود و همچنین از انتظار فعال نیز استفاده می شود و قفل، ما بین چک کردن های انتظار فعال، در اختیار قرار می گیرد و آزاد می شود. global RingBuffer queue; // A thread-unsafe ring-buffer of tasks. global Loc
k queueLock; // A mutex for the ring-buffer of tasks. // Method representing each producer thread's behavior: public method producer() { while (true) { task myTask = ...; // Producer makes some new task to be added. queueLock.acquire(); // Acquire lock for initial busy-wait check. while (queue.isFull()) { // Busy-wait until the queue is non-full. queueLock.release(); // Drop the lock temporarily to allow a chance for other threads // needing queueLock to run so that a consumer might take a task. queueLock.acquire(); // Re-acquire the lock for the next call to "queue.isFull()". queue.enqueue(myTask); // Add the task to the queue. queueLock.release(); // Drop the queue lock until we need it again to add the next task. // Method representing each consumer thread's behavior: public method consumer() { while (true) { queueLock.acquire(); // Acquire lock for initial busy-wait check. while (queue.isEmpty()) { // Busy-wait until the queue is non-empty. queueLock.release(); // Drop the lock temporarily to allow a chan
ce for other threads // needing queueLock to run so that a producer might add a task. queueLock.acquire(); // Re-acquire the lock for the next call to "queue.isEmpty()". myTask = queue.dequeue(); // Take a task off of the queue. queueLock.release(); // Drop the queue lock until we need it again to take off the next task. doStuff(myTask); // Go off and do something with the task. در این روش قطعاً وضعیت ناسازگار رخ نمی دهد، اما منابع CPU را، به دلیل انتظار فعال بی مورد، تلف می کند. حتی اگر صف، خالی باشد و ریسمان های تولید کننده به مدت طولانی چیزی برای اضافه کردن نداشته باشند، باز هم ریسمان های مصرف کننده همیشه، و به طور غیرضروری در انتظار فعال هستند. به همین شکل، حتی اگر مصرف کننده ها برای مدت طولانی، روی پردازش کارهای کنونی خود مسدود شوند و صف پر باشد، باز هم تولیدکننده ها همیشه در انتظار فعال هستند. بنابراین، این یک مکانیسم اتلاف کننده است. در اینجا، نیاز به روشی داریم که تا زمانیکه صف غیر پر شود، ریسمان های تولید کننده مسدود شوند، و ریسمان های مصرف کننده را تا زمانیکه صف غیر خالی شود، مسدود کند.&lt;br&gt; (ت