|
در مثال قبل دیدیم که چطور وضعیت یک شمارندهٔ ساده را با عملیات اتمیک مدیریت کنیم. برای وضعیتهای پیچیدهتر میتوانیم از یک میوتکس (mutex) استفاده کنیم تا دسترسی به دادهها از چند گوروتین امن باشد. |
|
![]()
|
|
|
|
|
Container یک مپ از شمارندهها نگه میدارد؛ چون میخواهیم
آن را همزمان از چند گوروتین بهروز کنیم، یک |
|
|
پیش از دسترسی به |
|
|
|
|
توجه کنید که مقدار صفر میوتکس همانطور که هست قابل استفاده است، پس اینجا نیازی به مقداردهی اولیه نیست. |
|
|
|
|
|
|
این تابع یک شمارندهٔ نامدار را در یک حلقه افزایش میدهد. |
|
|
چند گوروتین را همزمان اجرا میکنیم؛ توجه کنید که
همهٔ آنها به یک |
|
|
|
|
|
|
صبر میکنیم تا گوروتینها تمام شوند |
|
|
اجرای برنامه نشان میدهد که شمارندهها همانطور که انتظار داشتیم بهروز شدهاند. |
|
|
در ادامه میبینیم که چطور همین کار مدیریت وضعیت را فقط با گوروتینها و کانالها پیادهسازی کنیم. |
مثال بعدی: گوروتینهای حالتدار.