Есть статья о семафорах в OS X . Автор тестирует семафор, увеличивая и уменьшая статическую переменную в двух потоках. С семафором, защищающим доступ к переменной, переменная заканчивается нулем. Без защиты переменная в конечном итоге имеет поддельное значение. Я попробовал код, и он работает. Я не понимаю, как параллельный доступ из двух потоков может повлиять на окончательное значение переменной. В конце концов, мне кажется, что это комбинация +1 и -1, которая должна быть коммутативной, верно? Я чувствую, что упускаю что-то явно очевидное, что это? :)