گزينه 4 درست است.
سناریوی اول: اگر ابتدا P0 اجرا شود و wait(S0) را فراخوانی کند، S0®count را 0 میکند (S0®count--) و یک بار 'HELLO' را چاپ میکند و با signal(S1) و signal(S2) شمارنده هر دو سمافور را 1 میکند. حال فرض کنید قبل از شروع دور دوم حلقه، کوانتوم P0 تمام شده و به فرایندهای بعد سوئیچ شود. حال دو فرایند P1 و P2 میتوانند هر کدام یک بار اجرا شوند و هر کدام یک بار signal(S0) کنند. دقت کنید با اینکه دو بار signal (معادل up یا release) پشت سر هم روی سمافور S0 انجام شده است، اما چون سمافور باینری است مقدار S0®count برابر 2 نمیشود و 1 میماند. پس از آن P0 اجرا میشود و فقط یک دور دیگر با فراخوانی wait(S0) مقدار S0®count را 0 میکند و بنابراین یک بار دیگر 'HELLO' را چاپ میکند (جمعاً دو بار) و در دور سوم با فراخوانی wait(S0) برای همیشه میخوابد.
سناریوی دوم: اگر ابتدا P0 اجرا شود و wait(S0) را فراخوانی کند، S0®count را 0 میکند (S0®count--) و یک بار 'HELLO' را چاپ میکند و با siganl(S1) و signal(S2) شمارنده هر دو سمافور را 1 میکند و در دور دوم با wait(S0) میخوابد. حال اگر فرایند P1 اجرا شود میتواند از wait(S1) عبور کرده و با signal(S0) فرایند P0 را بیدار کند. اکنون اگر P0 قبل از P2 اجرا شود برای بار دوم 'HELLO' را چاپ میکند و با signal(S1) و signal(S2) شمارنده هر دو را 1 میکند و در دور سوم با wait(S0) میخوابد. حال اگر فرایند P2 اجرا شود میتواند از wait(S2) عبور کرده و با signal(S0) فرایند P0 را مجدداً بیدار کند. اکنون اگر P0 اجرا شود برای بار سوم 'HELLO' را چاپ میکند و با signal(S1) و signal(S2) شمارنده هر دو را 1 میکند و در دور چهارم با wait(S0) برای همیشه میخوابد. دقت کنید فرایندهای P1 و P2 در حلقه قرار ندارند و فقط یک دور اجرا میشوند و امکان تکرار P0 بیش از سه بار وجود ندارد.
سناریوی سوم: اگر ابتدا P0 اجرا شود و wait(S0) را فراخوانی کند، S0®count را 0 میکند (S0®count--) و یک بار 'HELLO' را چاپ میکند و با signal(S1) و signal(S2) شمارنده هر دو سمافور را 1 میکند و در دور دوم با wait(S0) میخوابد. حال اگر فرایند P1 اجرا شود میتواند از wait(S1) عبور کرده و با signal(S0) فرایند P0 را بیدار کند. سپس اگر فرایند P2 اجرا شود میتواند از wait(S2) عبور کرده و با signal(S0) شمارنده S0 را برابر 1 کند (ذخیره سیگنال). اکنون اگر P0 اجرا شود از خط بعد از wait اجرا میشود و برای بار دوم 'HELLO' را چاپ میکند و با signal(S1) و signal(S2) شمارنده هر دو را 1 میکند و در دور سوم نیز wait(S0) را فراخوانی میکند و S0®count را 0 میکند (S0®count--) و یک بار دیگر 'HELLO' را چاپ میکند (جمعاً سه بار) و signal(S1) و signal(S2) شمارنده سمافورهای باینری را بیش از 1 نمیکند و فرایند P0 در دور چهارم با wait(S0) برای همیشه میخوابد.
اگر ابتدا فرایندهای P1 و P2 اجرا میشدند نیز میخوابیدند و بعداً توسط P0 بیدار میشدند و یکی از سناریوهای فوق پیش میآمد. نهایتاً 'HELLO' دو یا سه بار چاپ میشود (حداقل دو بار).