نشان‌بر: تفاوت میان نسخه‌ها

جز
متغییر -> متغیر
جز (ربات ردهٔ همسنگ (۲۶) +مرتب (۱۱ core): + رده:ادسخر دیکسترا)
جز (متغییر -> متغیر)
در [[علم رایانه]] '''نشانبر''' یا '''سمافور''' {{به انگلیسی|Semaphore}} به متغییریمتغیری گفته می‌شود که در محیط‌های [[همروندی|همروند]] برای کنترل دسترسی [[فرایند]]ها به منابع مشترک به کار می‌رود. سمافور می‌تواند به دو صورت [[دودویی]] (که تنها دو مقدار صحیح و غلط را دارا است) و یا شمارنده اعداد صحیح باشد. از سمافور برای جلوگیری از ایجاد [[وضعیت رقابتی]] میان فرایندها استفاده می‌گردد. به این ترتیب، اطمینان حاصل می‌شود که در هر لحظه تنها یک فرایند به منبع مشترک دسترسی دارد و می‌تواند از آن بخواند یا بنویسد ([[انحصار متقابل]])
 
سمافورها اولین بار به‌وسیلهٔ دانشمند علوم رایانه [[هلند]]ی، [[ادسخر دیکسترا]] معرفی شدند.<ref>http://www.cs.utexas.edu/users/EWD/transcriptions/EWD01xx/EWD123.html E. W. Dijkstra, Cooperating sequential processes. Technological University, Eindhoven, The Netherlands, September 1965.</ref> و امروزه به طور گسترده‌ای در [[سیستم عامل]]ها مورد استفاده قرار می‌گیرند.
 
== شیوهٔ عملکرد سمافور ==
اصل اساسی این است که دو یا چند فرایند می‌توانند به وسیلهٔ سیگنال‌های ساده با یکدیگر همکاری کنند. هر فرایند را می‌توان در نقطهٔ خاصی از اجرا متوقف نموده، و تا رسیدن سیگنال خاصی از اجرای آن جلوگیری نمود. برای ایجاد این اثر، از متغییرهایمتغیرهای خاصی به نام سمافور استفاده می‌گردد.
 
هر فرایندی که بخواهد به منبع مشترک دسترسی داشته باشد، اعمال زیر را انجام خواهد داد:
 
== پیاده سازی ==
سمافور متغییریمتغیری است که میان چند [[فرایند (رایانه)|فرایند]] به اشتراک گذاشته می‌شود. سمافور باید مستقل از فرایندها بوده و در فضایی از حافظه قرار گیرد که فرایندها بتوانند به آن دسترسی داشته باشند، همچنین عملیاتی که روی سمافور انجام می‌گیرد باید به صورتی پیاده سازی گردد که هیچ گونه [[وقفه]]ای هنگام انجام آن عملیات به وجود نیاید (اتمیک باشد). به همین دلیل، سمافور در [[هسته سیستم‌عامل|هسته]] سیستم‌عامل پیاده سازی می‌گردد و کنترل آن نیز توسط سیستم عامل صورت می‌گیرد. به این معنی که فرایندها تنها می‌توانند توسط [[فراخوانی سیستم]] با سمافورها کار کنند.
 
در سیستم عامل‌هایی که از استاندارد [[پوزیکس]] پیروی می‌کنند، دو فراخوان سیستمی semget و semctl برای کار با سمافورها وجود دارد.<ref>W. Richard Stevens & Stephen A. Rago, Advanced Programming in the UNIX Environment: Second Edition, Addison Wesley Professional, 2005, ISBN 0-201-43307-9</ref>
۳۱

ویرایش